当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

Visual C++-致命错误LNK1112:模块计算机类型“x64”与目标计算机类型“x86”冲突

admin 146℃
我使用CUDA(VC++,VisualStudio2008 8SP1)调试一个FEM程序。由于cuda的不足,该程序只能在win32平台上运行。我认为链接的库文件都是在x86平台上编译的,但是在编译时,我收到错误消息'致命错误LNK112module machine type'x64'与目标计算机类型'x86'冲突'。

我试过把平台改成x64,但没用。请告诉我:什么是'模块机类型'和什么是'目标机类型'?我怎样才能克服它呢?

我写了一篇blog关于这个的文章,因为我遇到了这个令人恼火的问题,最后我把我的系统拉回到工作状态。

以下是要检查的内容,按以下顺序:

  1. 检查链接器设置中的属性选项:属性>配置属性>链接器>高级>目标计算机。如果您的目标是64位生成,请选择MachineX64;如果要生成32位生成,请选择MachineX86。

  2. 从visual studio的主菜单中选择build>configuration manager。确保您的项目指定了正确的平台。IDE可以设置为生成x64,但解决方案中的单个项目可以设置为目标win32。所以,是的,visual studio留下了很多绳子来吊死自己,但这就是生活。

  3. 检查库文件,确定它们确实是平台所针对的类型。这可以通过使用visual studio vc\bin目录中的dumpbin.exe来使用。使用-headers选项转储所有函数。查找每个功能的机器条目。如果是64位版本,它应该包括x64。

  4. 在visual studio中,从主菜单中选择工具>选项。选择项目和解决方案> VC++目录。从'平台'下拉列表中选择x64。确保第一个条目是:$(vcsinstalldir)bin\x86_amd64,然后是$(vcsinstalldir)bin。

一旦我做了第四步,一切都为我工作。问题是我在所有的项目中都遇到了这个问题,我想编译成一个64位的目标。

除了c johnson list之外,我还要加上以下几点:

签入Visual Studio:
项目属性->配置属性->链接器->命令行。

'附加选项'不应包含 /machine:X86

我有这样的密钥,由cmake输出生成:CMake生成x86项目,然后通过 Configuration Manager 在visual studio 2010中,除了指定的链接器命令行 /machine:X86 分开。

当我试图将x64构建添加到从vs2003转换的项目时,在vs2008中也遇到了同样的问题。

我查看了在谷歌(目标机器,VC++目录,垃圾桶……)上搜索这个错误时发现的一切,一切看起来都很好。

最后,我创建了一个新的测试项目,并做了相同的更改,它似乎工作了。

在vcproj文件之间进行比较,发现了问题….

我转换的项目在链接器->命令行下设置了/machine:i386作为附加选项集。因此设置了两个/机器选项(x64和i386),另外一个优先选择。

删除此项并在'链接器'->'高级'->'目标计算机'下正确设置,问题就消失了。

所有的项目设置看起来都很完美,但我还是犯了错误。调查 .vcxproj 文件和搜索'x86'发现了问题:

<Lib>
  <AdditionalOptions> /machine:X86 %(AdditionalOptions)</AdditionalOptions>
</Lib>

快速搜索/替换所有事件(10个单独的文件设置)解决了此问题。

转载请注明:我的代码 » Visual C++-致命错误LNK1112:模块计算机类型“x64”与目标计算机类型“x86”冲突