2017-03-02 52 views
2

將使用不同GCC版本編譯的源生成的對象鏈接到共享庫中安全嗎?鏈接來自不同GCC版本的編譯目標文件是否安全?

我假設沒有,但如果使用的GCC在代碼生成和優化改進方面沒有區別?是否有信息知道哪個GCC編譯器不向後兼容?

我的問題還涉及到二進制文件,我看了

https://gcc.gnu.org/onlinedocs/gcc/Compatibility.html

從我的理解,因爲他們遵循相同ABI

+1

GCC的版本有何不同?如果您嘗試將GCC 2.x的代碼與GCC 6.x鏈接起來,則可能會出現問題。如果你將4.9.4和4.9.3混合在一起,就不會有問題。我沒有遇到與6.x代碼混合使用的4.x或5.x代碼的問題,但這並不能保證你找不到問題。 OTOH,用於平臺的ABI(應用程序二進制接口)通常在幾年內穩定,並且各種不同的編譯器都可以使用它,所以如果出現問題(即使使用2.x和6),我也會感到驚訝。 x被混合 - 只要對象文件類型是OK)。 –

+0

@JonathanLeffler從4.4到4.7?我在測試時沒有發現任何問題,但我不知道如何覆蓋我的測試,因爲我不知道可能發生的問題是什麼' – Bionix1441

+1

在我看來,部分基於經驗,重新遇到任何問題。我不確定我是否可以引用支持該爭用的文檔 - 這是我沒有跳過答案而不是評論的主要原因。 –

回答

1

這樣算下來後,不同版本的GCC是隻要兼容在網絡上的研究,以及閱讀幾個GCC發行說明,似乎GCC是向後兼容的,如果沒有ABI變化。通常,這將在發行說明中說明。我也做了一些實驗,使用不同的GCC編譯器和GCC連接器(由不同版本的GCC的不同含義),當它不兼容(不同的ABI版本)時,我得到鏈接器錯誤。

相關問題