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

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

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


当前回答

在我的例子中,将环境变量PROCESSOR_ARCHITECTURE设置为AMD64 修复了问题。

https://social.msdn.microsoft.com/Forums/en-US/f9303904-81ce-405d-85b3-b66d97e49971

其他回答

由于问题是由于编译和目标机器规格(x86 & x64)的差异造成的 遵循以下步骤:

打开要配置的c++项目。 选择“配置管理器”按钮,打开“配置管理器”对话框。 在“主用解决方案平台”下拉列表中,选择相应的选项,打开“新建解决方案平台”对话框。 在“类型或选择新平台”下拉列表中选择64位平台。

它解决了我的问题。

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

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

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

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

除了Jhonson的列表,还可以查看图书馆的文件夹

在visual studio中,从主菜单中选择Tools > Options。选择项目和解决方案> vc++目录。从平台下拉菜单中选择x64。

$(VCInstallDir)lib\AMD64;
$(VCInstallDir)atlmfc\lib\amd64;
$(WindowsSdkDir)lib\x64;

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

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

在Visual Studio 2013中,

1)检查项目属性页/配置属性/链接器/所有选项,并纠正所有未配置的机器和目录。

2)检查项目属性页/配置属性/链接器/输入,并纠正所有未配置的目录。

参见示例1)