連結C 17、C 14 和C 11 物件的相容性
安全組合
在三個編譯物件(A、B)的場景中和C) 使用相同的編譯器版本產生:
- A使用C 11標準編譯
- B 使用C 14 標準編譯
- C 使用C 17 標準編譯
...並假設:
結構具有一致的語義所有三個標準
正確表達了相互依賴關係
...根據GCC,
連結這些對象的任意組合
都是安全的。無論使用何種標準版本,GCC 在這種情況下都會確保 ABI 相容性。
注意事項
但是,如果使用不同的 GCC 版本編譯物件並使用不穩定的 C 標準功能,則可能會出現連結問題。例如,使用 C 11 標準連結使用 GCC 4.9 和 5 編譯的物件可能會因 GCC 4.x 中的 C 11 支援不穩定而導致問題。 - C 03、C 11 和C 17 的穩定性不同GCC版本的支援如下:
-
- C 03:全部穩定版本
C 11:自GCC 5 起穩定
C 17:在GCC 7 和 8中進行實驗
何時使用不同的C 標準版本,確保共享庫(libstdc .so) 至少是新的作為用於編譯任何對象的版本。 GCC 自版本 5 起提供了兩種 std::string 實作。使用 std::string 的物件應使用相同的實作進行編譯以實現相容性。
以上是能否使用同一編譯器安全連結 C 11、C 14 和 C 17 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!