我使用CUDA (vc++, Visual studio 2008sp1)来调试FEM程序。由于cuda的不足,该程序只能在Win32平台上运行。我认为链接的库文件都是在x86平台上编译的,但是当我编译它时,我得到了错误消息
致命错误LNK1112:模块机类型“x64”与目标机类型“X86”冲突。
我曾尝试将该平台转换为x64,但没有成功。请告诉我:什么是“模块机类型”,什么是“目标机类型”?我怎样才能克服它呢?
我使用CUDA (vc++, Visual studio 2008sp1)来调试FEM程序。由于cuda的不足,该程序只能在Win32平台上运行。我认为链接的库文件都是在x86平台上编译的,但是当我编译它时,我得到了错误消息
致命错误LNK1112:模块机类型“x64”与目标机类型“X86”冲突。
我曾尝试将该平台转换为x64,但没有成功。请告诉我:什么是“模块机类型”,什么是“目标机类型”?我怎样才能克服它呢?
当前回答
属性->configurationManager-> ActiveSolutionPlatform。这里选择x64。
它应该照顾到所有的依赖关系,编译应该能够顺利进行
其他回答
在我的例子中,将环境变量PROCESSOR_ARCHITECTURE设置为AMD64 修复了问题。
https://social.msdn.microsoft.com/Forums/en-US/f9303904-81ce-405d-85b3-b66d97e49971
我为自己解决了这个问题,如下所示。
首先,我根据这个问题的其他答案,得出的结论是所有的项目设置都是正确的。
然后我用编辑器检查了.vcxproj文件,并注意到两个(调试和发布)x64配置的< Link >属性没有指定< TargetMachine >,而Win32配置都包含< TargetMachine > MachineX86 < /TargetMachine >。
然而,我已经验证了,从Visual Studio的属性>配置属性>连接器>高级>目标机,x64配置说MachineX64 (/ Machine: x64)。
因此,我编辑了.vcxproj文件,在两个x64配置中包含< TargetMachine > MachineX64 < /TargetMachine >。回到Visual Studio项目属性对话框,我注意到MachineX64 (/MACHINE:X64)设置和以前一样,只是现在它以粗体显示(显然意味着该值不是默认值)。
我重建了它,它成功了。
除了C Johnson的清单之外,我还要补充以下几点:
检查在Visual Studio: 项目属性->配置属性-> link ->命令行。
“附加选项”不应该包含/machine:X86
我有这样的键,由CMake输出生成:CMake生成x86项目,然后我通过Visual Studio 2010中的配置管理器添加了x64平台-除了链接器命令行,单独指定/machine: x86之外,新平台的一切都创建得很好。
上面有很多好的建议。
另外,如果你试图在x86 Win32中构建:
确保你在Program Files(x86)中链接到的所有库实际上都是x86库,因为它们不一定…
例如,我在C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\SDK中链接到的一个lib文件抛出了这个错误,最终我在C:\Program Files (x86)\Windows Kits\10\ lib \10.0.18362.0\um\x86中找到了它的x86版本,一切都正常工作。
对于那些使用QT Creator的人来说,问题也是一样的(正如@c-johnson所描述的那样)。 确保工具包中MSVC的编译器设置设置为x86,如下所示。