【问题标题】:fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'致命错误 LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突
【发布时间】:2012-02-06 20:18:29
【问题描述】:

我使用 Visual Studio 2010 Premium。我有两个项目 A 和 B,我尝试将它们都编译到 64 位平台。
项目 A 输出项目 B 所依赖的 .dll 和 .lib 文件。
我已经成功地将项目 A 编译到 64 位平台,但是当我编译项目 B 时,出现以下错误:

mfcs100d.lib(nolib.obj):致命错误 LNK1112:模块机器类型“X86”与目标机器类型“x64”冲突

可能是什么问题?我真的不知道这个 mfcs100d.lib 文件是什么。
我在项目 A 的 dll 文件上使用了“Dependency Walker”,它似乎只依赖于 64 位 dll 文件。 此外,我去了项目 B(属性页 -> 配置属性 -> 链接器 -> 高级)并确认“目标机器”设置为“MachineX64”。 此外,在配置管理器上,平台设置为 x64。

有人告诉我问题可能是这样的:

转到项目 B(属性页 -> 配置属性 -> C\C++ -> 预处理器 -> 预处理器定义)我有以下值:

WIN32  
_DEBUG  
_WINDOWS  
_AFXEXT  

这真的相关吗?我应该替换“WIN32”值吗?如果是这样,那怎么办?我真的不明白这些定义的含义以及如何更改它们。

编辑:我刚刚意识到这可能根本不相关。这些只是预处理器的简单定义,例如可以由 C++ #define 命令确定的定义。然而我可能是错的。

【问题讨论】:

  • 不要摆脱WIN32,即使编译64位代码它仍然是Win32 API,所以你需要定义WIN32。

标签: visual-studio-2010 64-bit preprocessor linker-errors


【解决方案1】:

很难弄错。从 Build + Configuration Manager 开始,并仔细检查是否为两个项目选择了 x64。下一步是验证库搜索路径。右键单击项目、属性、VC++ 目录、库目录。单击组合框箭头以查看“继承的值”。 $(VCInstallDir)atlmfc\lib\amd64 应该是列表中的第二个,这就是 64 位版本的 mfcs100d.lib 所在的位置。

【讨论】:

  • 列表中的第一个值是 $(VCInstallDir)bin\x86_amd64 第二个是 $(VCInstallDir)bin。如何将第一个值更改为 $(VCInstallDir)atlmfc\lib\amd64 ?好像我无法重写这个iteam,添加一个新项目导致我出错。
  • 您查看的设置有误,请查看库目录,而不是可执行目录。
  • 哦,是的,对不起。是的,值 $(VCInstallDir)atlmfc\lib\amd64 确实写在那里,所以我想知道这是什么问题。
【解决方案2】:

添加 x64 目标时,进入常规设置并查看输出目录和中间目录。对于 Debug 目标从“Debug”更改为“Debug64”,Release 目标相同。

【讨论】:

  • 你能添加一个屏幕截图吗?
猜你喜欢
  • 2011-04-03
  • 2021-08-10
  • 1970-01-01
  • 2013-01-20
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多