我使用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,但没有成功。请告诉我:什么是“模块机类型”,什么是“目标机类型”?我怎样才能克服它呢?
当前回答
我为自己解决了这个问题,如下所示。
首先,我根据这个问题的其他答案,得出的结论是所有的项目设置都是正确的。
然后我用编辑器检查了.vcxproj文件,并注意到两个(调试和发布)x64配置的< Link >属性没有指定< TargetMachine >,而Win32配置都包含< TargetMachine > MachineX86 < /TargetMachine >。
然而,我已经验证了,从Visual Studio的属性>配置属性>连接器>高级>目标机,x64配置说MachineX64 (/ Machine: x64)。
因此,我编辑了.vcxproj文件,在两个x64配置中包含< TargetMachine > MachineX64 < /TargetMachine >。回到Visual Studio项目属性对话框,我注意到MachineX64 (/MACHINE:X64)设置和以前一样,只是现在它以粗体显示(显然意味着该值不是默认值)。
我重建了它,它成功了。
其他回答
如果您的解决方案有库项目,请检查属性->图书管理员->通用中的目标机器属性
对于那些使用QT Creator的人来说,问题也是一样的(正如@c-johnson所描述的那样)。 确保工具包中MSVC的编译器设置设置为x86,如下所示。
所有的项目设置看起来都很完美,但我仍然得到了错误。查看.vcxproj文件并搜索“x86”就会发现问题:
<Lib>
<AdditionalOptions> /machine:X86 %(AdditionalOptions)</AdditionalOptions>
</Lib>
快速搜索/替换所有出现的情况(10个单独的文件设置)解决了这个问题。
在Visual Studio 2012 +/-中,“配置属性”. linker的属性页。“命令行”包含一个标记为“附加选项”的框。如果您正在构建x64,请确保该方框不包含/MACHINE:I386。我的项目是这样做的,它产生了问题中的错误。
模块机类型是您正在编译的机器,目标机类型是您正在为其构建二进制文件的x86或x64架构。