2012-06-18 185 views
13

也許一個非常微不足道的問題:如何在64位機器上將64位C++程序編譯?

我需要編譯一個程序爲64位(以前編寫的makefile以編譯爲32位)。

我看到選項-m32出現在每個文件編譯的命令行參數中。所以,我修改了makefile以擺脫OPTFLAG中的-m32,但是當程序編譯時,我仍然看到-m32顯示出來,二進制文件仍然是32位。這個m32是否也來自其他地方?

+0

你想編譯什麼?也許你可以用適當的標誌重新配置它,如果它使用自動工具而不是調整Makefile的話。如果它不是您自己的軟件,那麼最好向相應的社區諮詢如何正確構建他們的軟件。僅僅從gcc的角度來看,你需要它的正確版本和'-m64' http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options。 – mlt

+0

make不預定義-m32,也沒有任何其他系統組件(除非有任何相關的特定於發行版的修改,但通常沒有),如果這就是您要求的。 – hvd

+0

@mlt -m64不是必須的; -m64是64位編譯器的默認值。 – hvd

回答

14

-m32只能來臨從你的makefile文件中的某個地方,你必須將其記錄下來(使用遞歸grep)並將其刪除。

When I am able to force -m64, I get "CPU you selected does not support x86-64 instruction set".Any clues?. uname -a gives x86_64

該錯誤意味着在makefile文件一樣-march=i686一個選項,它並不適用於64位編譯,請嘗試刪除了。

如果您不能刪除它(嘗試更難!),然後在命令行上添加-march=x86-64將指定一個通用的64位CPU類型。

4

如果你正在試圖建立該軟件是自動工具爲基礎的,這應該做的伎倆:

./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make 

或者,只是一個普通的Makefile:

env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make 
+0

正如我在評論中已經提到的,'-m64'是64位配置gcc的默認值。如果你需要指定'-m64',那麼你做錯了什麼。如果軟件包認爲需要添加'-m32',它可能不僅僅是這個,而且你沒有處理它的其餘部分。 – hvd

相關問題