Преобразование 32-битного неуправляемого проекта VC ++ в 64-битный - PullRequest
2 голосов
/ 15 июля 2011

Я работаю в 32-битной среде. У меня есть решение, содержащее набор проектов C # и набор неуправляемых проектов VC ++. Для всех платформ сборки проектов C # установлено значение «Любой процессор», а для проектов VC ++ это Win32. Мы переходим на 64-битную платформу. Теперь мои вопросы

1) Могу ли я преобразовать мои 32-битные VC ++ Dlls в 64-битные в моей 32-битной среде ?

2) есть ли способ, которым я могу установить платформу для проектов VC ++ также на что-то вроде «Любой процессор»?

3) Я открыл Configuration Manager в меню Build в VS2008. Установите для платформы Active Solution значение «Любой процессор» (, но я не изменил ранее установленный для этой платформы только ), затем я установил платформу проектов VC ++ на X64. Теперь я очистил решение и попытался пересобрать решение. Проекты VC ++ не создавались, и, следовательно, проекты C #, имеющие ссылки на проекты VC ++, также не создавались. Я попытался независимо построить проект VC ++, и я получил эту ошибку: " фатальная ошибка LNK1112: тип компьютера с модулем X86 конфликтует с типом машины назначения x64 "

Любые идеи и предложения приветствуются!

Спасибо, Кеерти Сомасундарам

Ответы [ 2 ]

7 голосов
/ 15 июля 2011

Могу ли я преобразовать мои 32-битные VC ++ Dlls в 64-битные в моей 32-битной среде?

Вы можете использовать 32-битную систему для компиляции кода для 64-битной системы, если у вас есть 64-битные компиляторы (некоторые выпуски некоторых версий Visual Studio не включают 64-битные компиляторы и т. Д.). Поскольку вы смогли установить целевую платформу на x64 и скомпилировать код, похоже, у вас есть доступные компиляторы.

Тестирование и отладка сложнее, если вы выполняете компиляцию в 32-битной системе. Очевидно, вы должны запустить свои тесты в системе x64, поэтому теперь вы вынуждены использовать удаленный отладчик.

есть ли способ, которым я могу установить платформу для проектов VC ++ также что-то вроде «Любой процессор»?

Это не имеет смысла для нативного C ++. Dll с нативным кодом - это определенно 32-битный или 64-битный файл кода. Управляемый код может поддерживать «Любой ЦП», потому что JIT заботится о компиляции IL в действительные коды операций платформы, поэтому он может преобразовываться в x86 или x64 в зависимости от ситуации.

Проекты VC ++ не создавались

Используйте команду Менеджера конфигурации меню «Сборка», чтобы проверить конфигурацию сборки. Вы можете обнаружить, что в конфигурации есть запись для вашего проекта VC ++ Dll для платформы x64, но флажок Build снят.

фатальная ошибка LNK1112: тип компьютера модуля X86 конфликтует с целью тип машины х64

Компоновщик сообщает вам, что целью для связанного файла является x64 (что вам нужно), но модуль (файл), который вводится в компоновщик, был создан для x86, поэтому он конфликтует с этой целью. Что вы делаете, чтобы решить эту проблему, зависит от того, что модуль.

Если вы получаете эту ошибку с помощью файла obj, созданного путем компиляции одного из файлов cpp вашего проекта, то проблема заключается в том, что ваш проект компилирует этот файл cpp для x86 вместо x64.

Скорее всего, вы получаете эту ошибку для файла LIB (или другого файла), связанного с вашим проектом - например, файла LIB из какого-то SDK. В этом случае исправление, вероятно, заключается в изменении свойств проекта, поэтому вы используете правильный (то есть, x64) файл LIB. Некоторые SDK используют разные имена файлов для 32- и 64-битных версий файла LIB. Другие используют одно и то же имя для файла LIB, но хранят версии x86 и x64 в разных каталогах.

Хорошим местом для начала будет Project | Свойства | Linker. На вкладке Общие есть поле «Дополнительные каталоги библиотек». Любая запись в нем, вероятно, должна указывать на разные каталоги для платформ x86 и x64 (если только для хранения файлов x86 и x64 не используется определенный каталог). На вкладке «Вход» есть поле «Дополнительные зависимости». Любые записи там, вероятно, должны быть одинаковыми для всех платформ (кроме случаев, когда для отличия файлов x86 и x64 используются разные имена файлов).

Еще одно место, чтобы проверить это Инструменты | Варианты | Проекты и решения | Каталоги VC ++. В этих настройках перечислены различные каталоги, в которых ищутся определенные типы файлов. Есть отдельные списки для каждой платформы. В вашем случае вы хотели бы проверить список «Библиотечные файлы». Для платформы x64 вы должны убедиться, что в списке «Файлы библиотек» указаны каталоги, содержащие версии библиотек x64.

3 голосов
/ 12 октября 2012

Для решения этой проблемы я нашел следующую ссылку очень полезной.

http://msdn.microsoft.com/en-us/library/9yb4317s.aspx

Я пытался преобразовать 32-битное приложение VC ++ VS2010 в 64-битное приложение.

Я получаю такие ошибки, как

ссылка предупреждение lnk4068 / машина не указана по умолчанию x86

или

фатальная ошибка. Lnk1112 Тип машины 'x86' конфликтует с целью. тип машины 'x64'

Я следовал советам различных других веб-сайтов, но мне требовалась информация о настройке таргетинга / MACHINE.

Для меня установка этого сработала:

Настройки проекта \ Конфигурационные свойства \ Библиотекарь \ Общие \ Целевая машина

Старое значение: пусто (по умолчанию x86) Новое значение: MachineX64 (/ MACHINE: X64)

Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...