我使用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)设置和以前一样,只是现在它以粗体显示(显然意味着该值不是默认值)。

我重建了它,它成功了。

其他回答

如果您的项目设置为在项目属性->配置属性->常规中具有相同的中间目录,也可能发生此问题

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

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

模块机类型是您正在编译的机器,目标机类型是您正在为其构建二进制文件的x86或x64架构。

上面有很多好的建议。

另外,如果你试图在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版本,一切都正常工作。

首先尝试以下几点: 1. 进入配置管理器,并创建一个新的x64,如果它已经不在那里。 2. 选择x64解决方案。 3.进入项目属性,然后链接器->高级选择x64机器。 4. 现在重新构建解决方案。

如果你仍然得到相同的错误。尝试干净的解决方案,然后重新构建,再次打开visual studio,您将获得最近打开的项目列表,右键单击该项目并将其从那里删除。现在转到解决方案并再次重新打开解决方案。