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

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

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


当前回答

在VS2008中,当我试图将X64版本添加到VS2003转换的项目中时,我遇到了同样的问题。

我查看了在谷歌(目标机器,vc++目录,DUMPBIN....)上搜索此错误时发现的所有内容,一切看起来都OK。

最后,我创建了一个新的测试项目,并做了相同的更改,似乎可以工作。

在vcproj文件之间进行差异,发现了问题....

我的转换项目有/MACHINE:i386设置为附加选项设置下的链接器->命令行。因此,有两个/MACHINE选项设置(x64和i386),另外一个优先。

删除这个,并在链接器->高级->目标机下正确设置,使问题消失。

其他回答

在VS2008中,当我试图将X64版本添加到VS2003转换的项目中时,我遇到了同样的问题。

我查看了在谷歌(目标机器,vc++目录,DUMPBIN....)上搜索此错误时发现的所有内容,一切看起来都OK。

最后,我创建了一个新的测试项目,并做了相同的更改,似乎可以工作。

在vcproj文件之间进行差异,发现了问题....

我的转换项目有/MACHINE:i386设置为附加选项设置下的链接器->命令行。因此,有两个/MACHINE选项设置(x64和i386),另外一个优先。

删除这个,并在链接器->高级->目标机下正确设置,使问题消失。

上面有很多好的建议。

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

"project property - CUDA Runtime API - GPU - NVCC Compilation Type"

设置64位编译选项-m64 -cubin

提示是在编译日志。 是这样的:

nvcc.exe ~~~~~~ -machine 32 -ccbin ~~~~~

“- 32号机器”是个问题。

第一个设置64位编译选项, 下一步重新设置混合编译选项。 然后你就能看到成功。

vcxproj文件可能包含“MACHINE:i386” 用编辑器编辑vcxproj文件。把它拿掉!

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