2010-05-04 136 views
5

我可以在最新版本的Ubuntu(附帶4.4.3)上安裝舊版本的gcc/g ++(4.1.3),並使用它來編譯應該在CentOS上運行的.so。由於缺少導入(GLIB_2_11,...),使用Ubuntu版本的gcc編譯的二進制文件無法在CentOS上加載。我需要C++(包括異常),所以我不能只是靜態鏈接glibc,我已經嘗試過了。在Ubuntu上編譯爲CentOS

我可以安裝舊的gcc而不刪除較新的gcc嗎?我如何去了解舊的gcc所需的庫?

我目前正在CentOS中開發代碼,但使用起來非常痛苦。我真的想轉移到Ubuntu桌面。

+0

在Ubuntu桌面上開發並在CentOS機器上構建最終的二進制文件(偶爾可能集成構建)(甚至可能在虛擬機中)會出現什麼問題。 – 2010-05-04 11:48:10

+0

我已經使用虛擬機。 CentOS虛擬機目前在5分鐘內啓動,一臺虛擬機已經足夠用於4GB RAM的筆記本電腦。 – Meh 2010-05-04 13:50:29

+0

嘗試禁用SELinux,如果你還沒有。我已經看到這會導致虛擬機中過度放緩。 – 2010-05-04 14:44:27

回答

5

g ++ - 4.1 is available for Ubuntu;只需運行apt-get install g++-4.1然後運行g++-4.1而不是g++。但是,僅使用較舊的編譯器可能無法解決所有庫問題。

像Joachim Sauer說的那樣,你最好的選擇是在Ubuntu上做你的開發,然後在CentOS上做最後的編譯。

即使您使用C++,靜態鏈接仍應該是一個選項。 (但是,在CentOS上編譯和使用動態鏈接要好得多)。

編輯:虛擬機是建立在CentOS上最直接的方法,但是如果你想避免內存和CPU開銷運行虛擬機並且不關心Ubuntu和CentOS內核之間的差異,那麼你可以創建一個包含CentOS或Fedora文件系統的子目錄,並且chroot可以完成你的構建。 This blog posting有詳細信息。

+1

顯然,在Linux上靜態鏈接到libstdC++看起來更復雜:http://www.trilithium.com/johan/2005/06/static-libstdc/ – Meh 2010-05-04 13:56:47