2010-12-06 59 views
7

如何編譯我的C++文件以在所有Linux發行版上工作。 我將它編譯的機器是Ubuntu 10.10爲所有Linux發行版編譯C++

如果我在Ubuntu 10.10上編譯它們,它們是否可以在其他Distros上工作,如Ubuntu,Fedora,debian,non debian distros ..等等?

回答

7
% gcc -o foo foo.c -static 

生成的二進制文件應該在大多數發行版的工作,因爲它運行在相同的架構(64位,32位,ARM,MIPS等)。

主要觀點是:由於您不知道目標系統上可以找到什麼,因此您必須將所有可以裝入的二進制文件捆綁到您正在運輸的二進制文件中,或者在某種「chroot」環境中也部署外部庫(無法靜態鏈接的東西),然後使用某種包裝來使用部署的庫而不是系統庫。

+2

這將適用於C,但不適用於C++。見http://www.trilithium.com/johan/2005/06/static-libstdc/ – 2010-12-16 00:34:55

3

儘管@akira答案可能適用於您的情況,但這不是最好的解決方案。大多數Linux發行版都有打包系統,可以爲您檢索依賴關係。

如果你是認真的寫作這是對別人的箱子使用Linux軟件,你將需要尋找到「GNU自動工具」,這是什麼驅動了「運行./configure & &使所有& &使安裝」件事你現在已經跑了不止一次了!

+0

嗯,該項目是不是開源? – Daniel 2010-12-08 04:30:42

1

如果您只使用Linux Standards Base中列出的庫,那麼動態可執行文件應該沒問題。

對於其他庫,可以鏈接它們的靜態版本或運送動態庫;我更喜歡前者。

我個人建議避免靜態鏈接的C庫,因爲這會妨礙通過它的工作,例如NSS的東西提供了一些有用的功能..