在x64(Visual Studio 2008)环境中构建x86代码?

时间:2010-01-15 21:27:23

标签: visual-c++ x86 64-bit linker-errors

我想为x86构建一个库(poco-1.3.6p2-all,它的价值)。我刚刚设置了一个新的(干净的)Windows 7 64位机器,我安装了Visual Studio 2008 Standard。到目前为止,此框中没有安装任何内容时出现安装错误。

在安装了VS 2008 Standard的Windows XP 32位系统上,相同的库已经完美构建。哦,是的,这都是非托管的C ++。

我得到的错误是项目中各个DLL的每个链接。示例:

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

有问题的库是从.cmd文件构建脚本调用的.vcproj文件构建的。

编译器选项(命令行)如下所示:

/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 个答案:

答案 0 :(得分:1)

右键单击VS中的项目,转到属性。找到Build选项卡,并确保“Platform target”设置为“x86”。

答案 1 :(得分:1)

我想我应该把这个问题放到床上。我摆弄了系统配置中的一些东西(比如路径变量),随后的构建工作正常,IE,我最终得到了32位OBJ文件,这些文件正确地链接到了DLL中。

我不确定改变了哪些影响了构建。

所以,“干净”的完整版本现在可以正常工作,但我不确切地知道我改变了什么让它起作用。从头开始重建我的系统(包括硬件)并重新安装所有内容后,我感到疲惫不堪。所以我可能省略了一些明显和愚蠢的东西(比如构建之前的“vsvars32”调用),并且make文件正在容纳我的不良默认值。

答案 2 :(得分:1)

我想早点回答,但没有机会。所以问题出在我的Visual Studio安装上。不知怎的,安装没有为x86和几个相关的dll安装编译器。一旦我重新安装它工作。而且使用的正确编译器是x86而不是交叉编译器。

答案 3 :(得分:0)

我有一个解决方案,但可能无法解决您的问题。

现在,我解决同样问题的方法是

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

我做到了,我的问题已经解决了。