我有2臺機器,兩臺機器都有相同的代碼副本。這兩臺機器都安裝了相同的Visual Studio,VS2013終極版本。當Visual Studio生成32位.obj文件和64位.obj文件?
該代碼是一個包含大量Windows API的QT項目。因此,qmake
將生成Makefile
,Makefile.Debug
和Makefile.Release
。這兩個機器上的Makefile
是相同的。
在Makefile.Debug
和Makefile.Release
中,實際的編譯器和鏈接器是VS's cl and link
。兩臺機器的區別在於,一臺是Windows 10,另一臺是Windows 8.1。但兩臺機器都是64位機器。
問題是,在Windows 10機器上,QT Creator的構建過程通過,但在Windows 8.1機器上,構建時會出現一個錯誤。 首先,錯誤是"xxx.dll: LNK1112: module machine type 'x64' conflicts with target machine type 'x86'"
。我在這裏知道"xxx.dll"
確實是'x64'
類型,而我意識到Windows 8.1機器認爲是"target machine type" is X86
,所以我通過手動修改Makefile.Debug
加入"/MACHINE:X64" to LINKFLAG
。此操作將錯誤更改爲"yyy.obj: module machine type 'x86' conflicts with target machine type 'x64'"
。是的,這次VS的鏈接知道目標機器應該是'x64',但是它看起來像VS的編譯器仍然將某些cpp文件編譯爲32位.obj文件。
我的問題是,爲什麼VS's cl
認爲它應該製作一個32位的obj文件而不是一個64位的obj文件?而且,如何讓VS's 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
你正在使用哪個Qt版本?確保您使用64位版本的64位編譯器。對於Qt創建者:工具 - >選項 - >構建和運行 - >套件 – Jeka
我使用QT社區5.5.1。該工具包應該是正確的。這是msvc2013_64。 – Finix