我使用CUDA (vc++, Visual studio 2008sp1)来调试FEM程序。由于cuda的不足,该程序只能在Win32平台上运行。我认为链接的库文件都是在x86平台上编译的,但是当我编译它时,我得到了错误消息

致命错误LNK1112:模块机类型“x64”与目标机类型“X86”冲突。

我曾尝试将该平台转换为x64,但没有成功。请告诉我:什么是“模块机类型”,什么是“目标机类型”?我怎样才能克服它呢?


当前回答

除了C Johnson的清单之外,我还要补充以下几点:

检查在Visual Studio: 项目属性->配置属性-> link ->命令行。

“附加选项”不应该包含/machine:X86

我有这样的键,由CMake输出生成:CMake生成x86项目,然后我通过Visual Studio 2010中的配置管理器添加了x64平台-除了链接器命令行,单独指定/machine: x86之外,新平台的一切都创建得很好。

其他回答

如果您的解决方案有库项目,请检查属性->图书管理员->通用中的目标机器属性

今天我就遇到了这种情况,因为我在x86模式下添加了一个库目录,并意外地删除了继承的目录,使它们变成了硬编码。 然后切换到x64后,我的vc++目录仍然读:

“... (VC_LibraryPath_x86美元);(WindowsSDK_LibraryPath_x86美元);”

而不是_x64。

我正在使用CMake,然后添加了一个win32配置。属性页显示x86,但实际上在文本编辑器中打开vcxproj文件时,它是x64!手动切换到x86解决了这个问题。

你可能有一个针对x64(这是模块机器类型)的. obj或. lib文件,而你链接的是x86(这是目标机器类型)。

在. obj文件上使用DUMPBIN /HEADERS,并在FILE HEADER VALUES块中检查机器条目。

在Visual Studio 2012 +/-中,“配置属性”. linker的属性页。“命令行”包含一个标记为“附加选项”的框。如果您正在构建x64,请确保该方框不包含/MACHINE:I386。我的项目是这样做的,它产生了问题中的错误。