Создание кода x86 в среде x64 (Visual Studio 2008)? - PullRequest
1 голос
/ 16 января 2010

Я хочу собрать библиотеку (poco-1.3.6p2-all, для чего она стоит) для x86. Я только что установил новый (чистый) Windows 7 64-битный компьютер и установил Visual Studio 2008 Standard. Ничто не установлено до сих пор на этом поле не было ошибки установки.

Эта же библиотека безупречно построена в 32-битной системе Windows XP с установленным VS 2008 Standard. О да, это все неуправляемый C ++.

Ошибка, которую я получаю, заключается в каждой ссылке на отдельные библиотеки DLL в проекте. Пример:

1>.\obj\debug_shared\CppUnitException1.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'

Указанная библиотека создается из файла .vcproj, вызываемого из сценария сборки файла .cmd.

Параметры компилятора (командная строка) выглядят так:

/Od /I "include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "CppUnit_EXPORTS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /GF /FD /EHsc /RTC1 /MDd /Fo".\obj\debug_shared/" /Fd".\obj\debug_shared/vc80.pdb" /W3 /nologo /c /ZI /errorReport:prompt

Командная строка компоновщика в настройках проекта выглядит следующим образом:

/OUT:"..\bin\CppUnitd.dll" /INCREMENTAL /NOLOGO /DLL /MANIFEST /MANIFESTFILE:".\obj\debug_shared\CppUnitd.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"..\bin\CppUnitd.pdb" /DYNAMICBASE /NXCOMPAT /IMPLIB:"..\lib\CppUnitd.lib" /MACHINE:X86 /ERRORREPORT:PROMPT

Мне кажется, что компоновщик видит объектные файлы x86, но вызывается в режиме x64, даже если опция командной строки верна.

Мне нужно, чтобы целью был тип 32 бит / x86, а не x64.

Есть ли какая-нибудь опция Visual Studio, которая исправит это?

Ответы [ 4 ]

1 голос
/ 19 января 2010

Я думаю, я должен положить этот вопрос в постель. Я возился с некоторыми вещами в конфигурации системы (например, с переменной пути), и последующие сборки прошли правильно, IE, я завелся с 32-битными файлами OBJ, которые правильно связаны с DLL.

Я не уверен, что изменилось, что повлияло на сборку.

Итак, полная сборка из "clean" работает сейчас, но я не знаю точно, что я изменил, чтобы это работало. Я был измотан после восстановления моей системы (включая аппаратное обеспечение) с нуля и переустановки всего. Так что, возможно, я пропустил что-то очевидное и глупое (например, вызов vsvars32 перед сборкой), и файл make предоставил мне нежелательные значения по умолчанию.

1 голос
/ 04 февраля 2010

Ну, я хотел ответить на это раньше, но у меня не было шанса. Таким образом, проблема была с моей установкой Visual Studio. Каким-то образом установка не установила компилятор для x86 и пару связанных библиотек. Как только я переустанавливал это работало. Также правильным компилятором будет x86, а не кросс-компилятор.

1 голос
/ 16 января 2010

Щелкните правой кнопкой мыши проект в VS, перейдите в свойства. Найдите вкладку «Сборка» и убедитесь, что «Цель платформы» установлена ​​на «x86».

0 голосов
/ 06 ноября 2014

У меня есть решение, но, возможно, оно не решит вашу проблему.

Теперь мой способ решить ту же проблему -

(in Visual Studio) Project -> Properties  ->  C/C++  ->  Optimization  ->  Inline Function Expansion =  Default

Я сделал это, и моя проблема решилась.

...