我使用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,但没有成功。请告诉我:什么是“模块机类型”,什么是“目标机类型”?我怎样才能克服它呢?
当前回答
这是一个非常令人沮丧和讨厌的问题,但一旦你理解了它,它就很简单了:你在构建一种架构类型(在你的情况下是x64)中有一些元素,尽管它是另一种类型(比如x86)的目标。
您可以通过查看哪个obj文件导致崩溃来分析问题的根源,并开始在那里寻找问题。每个obj将有一个源代码模拟:要么在cpp, c, asm等。可能有一些特殊的构建事件使用了错误的工具。在属性表中查看。
我会先看看那里,然后再看C·约翰逊的待办事项清单。
其他回答
首先尝试以下几点: 1. 进入配置管理器,并创建一个新的x64,如果它已经不在那里。 2. 选择x64解决方案。 3.进入项目属性,然后链接器->高级选择x64机器。 4. 现在重新构建解决方案。
如果你仍然得到相同的错误。尝试干净的解决方案,然后重新构建,再次打开visual studio,您将获得最近打开的项目列表,右键单击该项目并将其从那里删除。现在转到解决方案并再次重新打开解决方案。
在VS2008中,当我试图将X64版本添加到VS2003转换的项目中时,我遇到了同样的问题。
我查看了在谷歌(目标机器,vc++目录,DUMPBIN....)上搜索此错误时发现的所有内容,一切看起来都OK。
最后,我创建了一个新的测试项目,并做了相同的更改,似乎可以工作。
在vcproj文件之间进行差异,发现了问题....
我的转换项目有/MACHINE:i386设置为附加选项设置下的链接器->命令行。因此,有两个/MACHINE选项设置(x64和i386),另外一个优先。
删除这个,并在链接器->高级->目标机下正确设置,使问题消失。
今天我就遇到了这种情况,因为我在x86模式下添加了一个库目录,并意外地删除了继承的目录,使它们变成了硬编码。 然后切换到x64后,我的vc++目录仍然读:
“... (VC_LibraryPath_x86美元);(WindowsSDK_LibraryPath_x86美元);”
而不是_x64。
除了C Johnson的清单之外,我还要补充以下几点:
检查在Visual Studio: 项目属性->配置属性-> link ->命令行。
“附加选项”不应该包含/machine:X86
我有这样的键,由CMake输出生成:CMake生成x86项目,然后我通过Visual Studio 2010中的配置管理器添加了x64平台-除了链接器命令行,单独指定/machine: x86之外,新平台的一切都创建得很好。
在Visual Studio 2012 +/-中,“配置属性”. linker的属性页。“命令行”包含一个标记为“附加选项”的框。如果您正在构建x64,请确保该方框不包含/MACHINE:I386。我的项目是这样做的,它产生了问题中的错误。