gpt4 book ai didi

c++ - Visual Studio 何时生成 32 位 .obj 文件和 64 位 .obj 文件?

转载 作者:行者123 更新时间:2023-11-30 05:33:05 27 4
gpt4 key购买 nike

我有两台机器,两台机器都有相同的代码拷贝。两台机器都安装了同样的Visual Studio,VS2013终极版

该代码是一个包含大量 Windows API 的 QT 项目。因此,qmake 将生成MakefileMakefile.DebugMakefile.Release。这些 Makefile 在两台机器上都是一样的。

Makefile.DebugMakefile.Release中,实际的编译器和链接器是VS的cl和link。两台机器的区别在于,一台是Windows 10,另一台是Windows 8.1。但是两台机器都是64位机器。

问题是,在 Windows 10 机器上,QT Creator 中的构建进度通过,但在 Windows 8.1 机器上,构建时会出现一个错误。首先,错误是 “xxx.dll: LNK1112: 模块机器类型‘x64’与目标机器类型‘x86’冲突”。我在这里知道 "xxx.dll" 确实是 'x64' 类型,我意识到 Windows 8.1 机器认为 "target machine type"是 X86,因此我通过将 "/MACHINE:X64"添加到 LINKFLAG 来手动修改 Makefile.Debug。此操作将错误更改为 “yyy.obj:模块机器类型‘x86’与目标机器类型‘x64’冲突”。是的,这次 VS 的链接知道目标机器应该是“x64”,但看起来 VS 的编译器仍然将一些 cpp 文件编译为 32 位 .obj 文件。

我的问题是,为什么 VS 的 cl 认为它应该生成 32 位 obj 文件而不是 64 位 obj 文件?还有,如何让VS的cl做一个64位的obj呢?

我检查了两台机器上的 cl 命令。它们和下面一样。

cl -c -nologo -Zc:wchar_t -FS -Zi -MDd -GR -W3 
-w34100 -w34189 -w44996 -EHsc /Fd..\<some folder>
-DXXX -IYYY -Fodebug\ @C:\Users\someuser>\AppData\Local\Temp\ZZZ.obj.8160.63.jom ZZZ.cpp

最佳答案

Visual Studio 为不同的体系结构提供不同的编译器(即 cl.exe 二进制文件)。

检查 QT Creator 实际调用了哪个编译器(对于 x64 架构,它应该是 <MS VS Dir>/VC/bin/amd64/cl.exe )。我猜它要么来自您环境中的默认设置(PATH 变量),要么您必须正确设置 QT Creator 才能构建正确的架构。

关于c++ - Visual Studio 何时生成 32 位 .obj 文件和 64 位 .obj 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34917071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com