【问题标题】:Building x86 code in an x64 (Visual Studio 2008) Environment?在 x64 (Visual Studio 2008) 环境中构建 x86 代码?
【发布时间】:2010-01-15 21:27:22
【问题描述】:

我想为 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 选项可以解决此问题?

【问题讨论】:

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


    【解决方案1】:

    在VS中右键项目,进入属性。找到 Build 选项卡,确保“Platform target”设置为“x86”。

    【讨论】:

    • 在哪里?我没有看到任何选项卡或任何名为 Build 的部分。在属性 |链接器 |高级选项,Target Machine 设置为 MachineX86。
    • C++ 解决方案的属性可能与 C# 不同。还有哪些可用的?
    • 对于链接器选项,这是唯一看起来相关的选项。
    • 查找构建选项,因为看起来库正在编译为 x64,但尝试链接为 x86。我没有在这台机器上安装 Visual C++,只有 C#。我回家后看看。
    • 我认为你可能是对的。我刚刚弄清楚了 DUMPBIN 并检查了 COFF 信息。一个.obj的文件头报告“8664机器”(x64)为机器。
    【解决方案2】:

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

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

    因此,从“干净”构建的完整版本现在可以正常工作,但我不知道我究竟做了什么改变才能让它工作。从头开始重建我的系统(包括硬件)并重新安装所有东西后,我感到很疲惫。所以可能我忽略了一些明显和愚蠢的东西(比如构建之前的“vsvars32”调用)并且make文件正在为我提供不受欢迎的默认值。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2023-03-14
          • 2018-09-21
          • 2023-03-09
          • 2012-02-23
          • 1970-01-01
          • 1970-01-01
          • 2021-11-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多