首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决模块计算机类型“X86”与目标计算机类型“x64”Visual Studio的冲突

如何解决模块计算机类型“X86”与目标计算机类型“x64”Visual Studio的冲突
EN

Stack Overflow用户
提问于 2015-07-24 02:56:31
回答 5查看 53K关注 0票数 24

我正在编译Openssl库,我需要在python脚本中使用它。我正在使用Visual Studio 2015开发人员命令提示符。我的机器是64位Windows 7。

当我输入命令时:nmake -f ms\ntdll.mak

我得到了这个错误:

代码语言:javascript
复制
tmp32dll\uplink.obj : fatal error LNK1112: module machine type 'X86' conflicts w
ith target machine type 'x64'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0
\VC\BIN\amd64_arm\link.EXE"' : return code '0x458'
Stop.

我搜索了几个类似问题的解决方案,建议从项目设置中更改项目平台。我没有VS项目。我运行所有这些命令只是为了编译OpenSSL库。我使用的是VS命令。

EN

回答 5

Stack Overflow用户

发布于 2016-05-02 20:23:41

我也遇到了同样的问题--就是VS2013。

我遇到了两种方法,它们对你的情况可能有帮助,也可能没有帮助:

第一种方法

(可能仅与VS2013及更高版本相关)

打开“VS2015 x64本机工具命令提示符”并在那里执行命令。

代码语言:javascript
复制
 Note:
 If you get the opposite message:
 module machine type 'x64' conflicts with target machine type 'x86' 
 then you should open the 'VS2015 x86 Native Tools Command Prompt' 

这两个工具都可以在以下文件夹下找到:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\Shortcuts

第二种方法

(可能只与VS2013之前的版本相关)

在VS2015的开发人员命令提示符中,可以通过运行以下命令来更改编译器目标平台

"C:\Program Files (x86)\Microsoft Visual Studio 15.0\VC\vcvarsall.bat x64“

"C:\Program Files (x86)\Microsoft Visual Studio VS Version\VC\vcvarsall.bat目标平台“

VS 2017

Microsoft Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat目标平台"C:\Program Files (X86)\

代码语言:javascript
复制
Note:
VS Version: 10.0|11.0|12.0|15.0|... 
Target Platform: x86|amd64|x64|arm|x86_arm|x86_amd64|amd64_x86|amd64_arm|amd64_x86
*leaving the target platform empty will default to x86
票数 30
EN

Stack Overflow用户

发布于 2015-07-24 21:47:50

这个错误意味着tmp32dll\uplink.obj是一个32位的二进制文件,而链接器期望它是64位的,因为它的目标是64位。

看起来您需要将其重新编译为64位,或者只执行rebuild-all (或者删除所有*.obj甚至整个二进制输出目录)

如果构建过程中断,然后更改目标平台,然后以增量方式重复构建过程,则会发生这种情况。32位不能与64位混合,所以它要么完全是一种方式,要么完全是另一种方式。

票数 7
EN

Stack Overflow用户

发布于 2017-01-29 05:10:08

出现此错误是因为构建中的特定组件被编译为x86二进制文件,而不是x64 (目标计算机的体系结构)-基本上,您给了链接器一个正方形拼图块,并告诉它适合一个圆孔。

在您的案例中:

代码语言:javascript
复制
tmp32dll\uplink.obj : fatal error LNK1112: module machine type 'X86' conflicts w
ith target machine type 'x64'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0
\VC\BIN\amd64_arm\link.EXE"' : return code '0x458'
Stop.

您可以查看导致错误的obj文件的名称: uplink.obj,因此可以查看uplink.cpp (或uplink.asm或uplink.whatever)并检查它是如何编译的。通常,所有这些东西在VS中都是自动化的,但有时有一些特殊的构建步骤是由开发人员添加的。检查自定义、构建前和构建后事件,以查看是否正在使用x86工具对其进行组装。

在我的例子中,我试图使用visual studio 8在x64中编译7zip,除了汇编宏(asm)之外,所有的东西都在编译,汇编宏(Asm)在x86中编译,破坏了构建过程。通过查看asm的属性页,我发现VS正在尝试使用ml.exe而不是ml64.exe来编译它们。在我的例子中,更改了对ml64.exe的调用以消除此错误(我还必须通过删除所有x86代码将asm文件修改为64位,但这是另一回事)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31595869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档