Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 在x64(VisualStudio2008)环境中生成x86代码?_Visual C++_X86_64 Bit_Linker Errors - Fatal编程技术网

Visual c++ 在x64(VisualStudio2008)环境中生成x86代码?

Visual c++ 在x64(VisualStudio2008)环境中生成x86代码?,visual-c++,x86,64-bit,linker-errors,Visual C++,X86,64 Bit,Linker Errors,我想为x86构建一个库(poco-1.3.6p2-all,不管它值多少钱)。我刚刚安装了一台新的(干净的)Windows7 64位计算机,并安装了VisualStudio2008标准。到目前为止,此机箱上未安装任何内容,但存在安装错误 同一个库完美地构建在安装了VS 2008 Standard的Windows XP 32位系统上。哦,是的,都是非托管C++。 我得到的错误是在项目中各个DLL的每个链接上。例如: 1>.\obj\debug_shared\CppUnitException1.

我想为x86构建一个库(poco-1.3.6p2-all,不管它值多少钱)。我刚刚安装了一台新的(干净的)Windows7 64位计算机,并安装了VisualStudio2008标准。到目前为止,此机箱上未安装任何内容,但存在安装错误

同一个库完美地构建在安装了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选项可以解决此问题?

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

我想我应该把这个问题放到床上。我在系统配置中处理了一些事情(比如path变量),随后的构建工作正常进行,即,我最终得到了32位OBJ文件,这些文件正确地链接到DLL中

我不确定是什么改变影响了构建


所以,从“干净”开始的完整构建现在可以工作了,但我不知道到底是什么让它工作的。在从头开始重建我的系统(包括硬件)并重新安装所有东西后,我感到疲惫不堪。因此,我可能忽略了一些明显而愚蠢的东西(比如构建之前的“vsvars32”调用),make文件为我提供了一些不需要的默认值

我想早点回答,但没有机会回答。所以问题在于我的VisualStudio安装。不知何故,安装没有安装x86编译器和一些相关DLL。一旦我重新安装,它就工作了。而且正确的编译器应该是x86,而不是交叉编译器。

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

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

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

我做到了,我的问题解决了

在哪里?我没有看到任何选项卡或任何名为Build的部分。在属性链接器高级选项中,目标机器被设置为机器86.可能是C++解决方案不同于C语言的特性。还有哪些其他选项可用?对于链接器选项,这是唯一看起来相关的选项。请查找生成选项,因为它看起来库正在编译为x64,但尝试链接为x86。我在这个机器上没有安装VisualC++,只有C语言。我到家后再看看。我想你可能是对的。我刚刚找到了垃圾桶,检查了COFF信息。one.obj的文件头将“8664机器”(x64)报告为机器。