我正在编译Openssl库,我需要在python脚本中使用它。我正在使用Visual Studio 2015开发人员命令提示符。我的机器是64位Windows 7。
当我输入命令时:nmake -f ms\ntdll.mak
我得到了这个错误:
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命令。
发布于 2016-05-02 20:23:41
我也遇到了同样的问题--就是VS2013。
我遇到了两种方法,它们对你的情况可能有帮助,也可能没有帮助:
第一种方法
(可能仅与VS2013及更高版本相关)
打开“VS2015 x64本机工具命令提示符”并在那里执行命令。
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)\
“
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
发布于 2015-07-24 21:47:50
这个错误意味着tmp32dll\uplink.obj
是一个32位的二进制文件,而链接器期望它是64位的,因为它的目标是64位。
看起来您需要将其重新编译为64位,或者只执行rebuild-all (或者删除所有*.obj
甚至整个二进制输出目录)
如果构建过程中断,然后更改目标平台,然后以增量方式重复构建过程,则会发生这种情况。32位不能与64位混合,所以它要么完全是一种方式,要么完全是另一种方式。
发布于 2017-01-29 05:10:08
出现此错误是因为构建中的特定组件被编译为x86二进制文件,而不是x64 (目标计算机的体系结构)-基本上,您给了链接器一个正方形拼图块,并告诉它适合一个圆孔。
在您的案例中:
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位,但这是另一回事)。
https://stackoverflow.com/questions/31595869
复制相似问题