2010-09-15 288 views
3

這是一個特定的gcc相關問題。我有一個用g ++ 4.1.2編譯的庫,我想給用戶。用戶可以在他們的代碼中使用我們的API並鏈接我們的庫來創建最終的可執行文件。g ++版本兼容性

我的問題與g ++版本兼容性有關。我們的一些用戶正在使用g ++ 4.4.3,其他4.3.3,還有其他的4.2.1。用4.1.2編譯的庫是否與所有這些g ++版本兼容?我的猜測是他們應該是因爲他們是ABI兼容的。但是我們的一些客戶不同意。我真的不想運送同一個庫的四個不同版本。如果它們不相容,是否有一個具體的原因或者是否有辦法避免不兼容?

回答

2

總之,是的。如果您的應用程序不使用新GCC的功能,則可以使用較舊的GCC進行編譯。使GCC向後兼容,使用舊版GCC庫構建的應用程序不會在新版本上打破。

4

只要它們使用相同的ABI(應用程序二進制接口),兩個庫就相互兼容。據我所知,上一次海灣合作委員會正式更改ABI時使用的是v3.3或v3.4。

但是,這僅適用於兼容的代碼。任何依賴無證或未指明行爲的來源可能會在未經通知的情況下中斷。

所以答案是:你的編譯器版本都是兼容的;問題是源代碼是否是。

+0

用戶「Employed Russian」指出:「......在GCC 4.2.1附帶的libstdC++。so.6.0.9中存在不兼容性。」感謝您的附加組件。 – DevSolar 2010-09-21 15:02:26