我使用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。
它应该照顾到所有的依赖关系,编译应该能够顺利进行
其他回答
你可能有一个针对x64(这是模块机器类型)的. obj或. lib文件,而你链接的是x86(这是目标机器类型)。
在. obj文件上使用DUMPBIN /HEADERS,并在FILE HEADER VALUES块中检查机器条目。
所有的项目设置看起来都很完美,但我仍然得到了错误。查看.vcxproj文件并搜索“x86”就会发现问题:
<Lib>
<AdditionalOptions> /machine:X86 %(AdditionalOptions)</AdditionalOptions>
</Lib>
快速搜索/替换所有出现的情况(10个单独的文件设置)解决了这个问题。
对于一些使用命令提示符(dos提示符)的用户 这可能会有帮助:
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" --help
Error in script usage. The correct usage is:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option]
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] [version number]
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store [version number]
where [option] is: x86 | amd64 | arm | x86_amd64 | x86_arm | amd64_x86 | amd64_arm
where [version number] is either the full Windows 10 SDK version number or "8.1" to use the windows 8.1 SDK
:
The store parameter sets environment variables to support
store (rather than desktop) development.
:
For example:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 10.0.10240.0
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store 10.0.10240.0
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 8.1
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 store 8.1
:
Please make sure either Visual Studio or C++ Build SKU is installed.
如果你这样做:
CL "%1%2%3" /EHsc /链接user32。自由Gdi32。自由Winmm。自由comctl32。自由*。obj /子系统:CONSOLE /MACHINE:x86
你必须取消*。obj之前;为了避免混淆链接器与64和32位对象从以前的编译遗留下来?
上面有很多好的建议。
另外,如果你试图在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版本,一切都正常工作。
我的目标是一个x64 Windows 10文本模式的DOSBox应用程序在C语言。 使用“Visual Studio 2019 Community”通过DOS提示符“nmake -f makefile”进行编译。 错误是类似的,但在相反的方面:
fatal error LNK1112: module machine type 'x32' conflicts with target machine type 'X64'
在另一台计算机上用vc++ 2010编译是可以的。但是“Visual Studio 2019社区”在这台计算机上失败了。所以我的设置是正确的,以上所有答案都不工作。
我想和大家分享的解决方案是这样的make.bat:
call "c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
nmake -f makefile
你会发现还有很多其他的vcvarxxxx .bat,只有这一个词。