2010-01-15 72 views
1

我想为x86构建一个库(poco-1.3.6p2-all,值得的)。我刚刚安装了一台新的(干净的)Windows 7 64位机器,并安装了Visual Studio 2008 Standard。在此框上安装的任何内容都没有安装错误。在x64(Visual Studio 2008)环境中构建x86代码?

在安装了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' 

问题库是从.cmc文件构建脚本调用的.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选项可以解决这个问题?

回答

1

右键单击VS中的项目,进入属性。找到生成选项卡,并确保“平台目标”设置为“x86”。

+0

哪里?我没有看到任何标签或任何部分称为生成。在属性|中链接器|高级选项,Target Machine被设置为MachineX86。 – 2010-01-15 21:41:38

+0

C++解决方案的可能性不同于C#。还有哪些可用的? – 2010-01-15 22:14:43

+0

对于链接器选项,这是看起来相关的唯一选项。 – 2010-01-15 22:22:52

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 

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