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

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

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


当前回答

你可能有一个针对x64(这是模块机器类型)的. obj或. lib文件,而你链接的是x86(这是目标机器类型)。

在. obj文件上使用DUMPBIN /HEADERS,并在FILE HEADER VALUES块中检查机器条目。

其他回答

我在构建QT时遇到了这个问题,我在某处读到的说明建议我使用VS命令提示符配置nmake。

我选择了x64命令提示符并轻松地执行了配置。当我尝试nmake时,它给出了这个错误。

我想有些组件是为32位系统预建的。这个错误甚至报告了哪些模块是为x86构建的。

我使用32位默认的VS命令提示符,它工作。

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

我通过在Visual Studio 2013中将Win32更改为*64来解决这个问题。

属性->configurationManager-> ActiveSolutionPlatform。这里选择x64。

它应该照顾到所有的依赖关系,编译应该能够顺利进行

这是一个非常令人沮丧和讨厌的问题,但一旦你理解了它,它就很简单了:你在构建一种架构类型(在你的情况下是x64)中有一些元素,尽管它是另一种类型(比如x86)的目标。

您可以通过查看哪个obj文件导致崩溃来分析问题的根源,并开始在那里寻找问题。每个obj将有一个源代码模拟:要么在cpp, c, asm等。可能有一些特殊的构建事件使用了错误的工具。在属性表中查看。

我会先看看那里,然后再看C·约翰逊的待办事项清单。