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

C++ Visual Studio何时生成32位.obj文件和64位.obj文件?,c++,qt,.obj,C++,Qt,.obj,我有两台机器,它们都有相同的代码副本。这两台机器都安装了相同的Visual Studio,VS2013最终版本 该代码是一个包含大量Windows API的QT项目。因此,qmake将生成Makefile,Makefile.Debug和Makefile.Release。这两台机器上的Makefile是相同的 在Makefile.Debug和Makefile.Release中,实际的编译器和链接器是VS的cl和link。这两台机器之间的区别是,一台是Windows 10,另一台是Windows 8

我有两台机器,它们都有相同的代码副本。这两台机器都安装了相同的Visual Studio,VS2013最终版本

该代码是一个包含大量Windows API的QT项目。因此,
qmake
将生成
Makefile
Makefile.Debug
Makefile.Release
。这两台机器上的
Makefile
是相同的

Makefile.Debug
Makefile.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机器认为
“目标机器类型”是X86
,所以我修改了
Makefile.Debug
,将
“/machine:x64”添加到LINKFLAG
,手动进行调试。此操作将错误更改为“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
cl-c-nologo-Zc:wchar_t-FS-Zi-MDd-GR-W3
-w34100-w34189-w44996-EHsc/Fd.\
-DXXX-iyy-Fodebug\@C:\Users\someuser>\AppData\Local\Temp\ZZZ.obj.8160.63.jom ZZZ.cpp

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


检查QT creator实际调用的编译器(对于x64体系结构,它应该是
/VC/bin/amd64/cl.exe
)。我猜它要么来自您环境中的默认设置(
PATH
variable),要么您必须正确设置QT Creator以构建正确的体系结构。

您使用的是哪个QT版本?确保您使用的是64位版本的64编译器。对于Qt创建者:工具-->选项->构建和运行-->KitsI使用Qt社区5.5.1。套件应该是正确的。是msvc2013_64。你说得对。QT Creator仅从%PATH%选择cl.exe。我将路径从“…/bin”更改为“…../bin/amd64”,它位于VC文件夹中,然后这个难题就解决了!!