簡體   English   中英

Visual Studio何時生成32bit .obj文件和64bit .obj文件?

[英]When Visual Studio generates 32bit .obj file and 64bit .obj file?

我有2台機器,它們都具有相同的代碼副本。 這兩台機器都安裝了相同的Visual Studio VS2013 Ultimate版本

該代碼是具有許多Windows API的QT項目。 因此, qmake將生成MakefileMakefile.DebugMakefile.Release 這些Makefile在兩台計算機上都相同。

Makefile.DebugMakefile.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 ,因此我通過向"/MACHINE:X64" to LINKFLAG添加"/MACHINE:X64" to LINKFLAG手動修改了Makefile.Debug 此操作將錯誤更改為"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

Visual Studio為不同的體系結構提供了不同的編譯器(即cl.exe二進制文件)。

檢查哪個編譯器實際上被QT創建者調用(對於x64體系結構,它應該是<MS VS Dir>/VC/bin/amd64/cl.exe )。 我猜想它要么來自您環境中的默認設置( PATH變量),要么您必須正確設置QT Creator才能為正確的體系結構構建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM