2010-01-15 2 views
1

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

Такая же библиотека построена безупречно на 32-битной системе Windows XP с установленным стандартом VS 2008. О, да, это все неуправляемый 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, которая исправит это?

ответ

1

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

+0

Где? Я не вижу никаких вкладок или любого раздела, называемого Build. В свойствах | Линкер | Дополнительные параметры, Target Machine установлены на MachineX86. –

+0

Вероятно, разные свойства для C++-решений, чем C#. Какие другие доступны? –

+0

Для параметров компоновщика это единственный вариант, который выглядит связанным. –

0

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

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

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

0

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

0

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

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

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

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

Смежные вопросы