2013-01-07 73 views
-3

我有GCC 4.7.2和OS X 64位。我想從main.cpp爲我的一個朋友用Ubuntu 32位創建一個可執行文件exe。我試着用$ g++ main.cpp -o exe,但他說它不工作,因爲我編譯爲64位。從OS X創建用於Ubuntu的C++可執行文件

如何編譯32位?

+2

它不起作用 - 你的朋友需要在他的Linux系統上重新編譯源代碼。 –

+0

好吧,明白了。 Thanx – fpiro07

+1

獲取交叉編譯器。 –

回答

4

你的朋友是錯的。他可能是真的,他有一臺32位機器,並且已經創建了64位可執行文件,但即使您編譯爲32位(這是通過編譯和鏈接-m32完成的),還有很多其他原因仍然無法工作。 Mac OS X和Ubuntu是完全不同的系統,編譯爲一個的代碼將而不是運行在另一個上。

GCC的任何單一版本只能爲單個目標(即CPU和操作系統的單個組合)生成代碼。系統上的GCC是針對Mac OS X而構建的,即它是一個本機編譯器,意味着它爲它運行的同一系統生成代碼。

要爲Ubuntu生成可執行文件,您需要使用不同版本的GCC,其中一個版本的內置類似--target=i686-unknown-linux-gnu。如果GCC在你的Mac上運行,那麼它將是一個交叉編譯器,這意味着它在一個系統上運行,但爲不同類型的系統生成代碼。

要安裝和使用交叉編譯器,您還需要交叉目標的所有C庫,因此您需要獲取glibc源的副本並使用交叉編譯器在Mac上構建它們。這是相當複雜的,但有些項目,如crosstoolcrosstool-NG,試圖通過提供腳本來簡化它的工作。

在Mac上設置虛擬機並在VM中安裝Ubuntu,然後使用Ubuntu的本機GCC編譯Ubuntu的可執行文件將會簡單得多。

你的朋友做apt-get install gcc並自己編譯源代碼會更簡單。

+0

是的,我想我要在我的Mac上的虛擬機上進行編譯。非常感謝 – fpiro07

相關問題