首頁 >後端開發 >C++ >能否使用同一編譯器安全連結 C 11、C 14 和 C 17 物件?

能否使用同一編譯器安全連結 C 11、C 14 和 C 17 物件?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 10:52:13942瀏覽

Can C  11, C  14, and C  17 Objects be Safely Linked Using the Same Compiler?

連結C 17、C 14 和C 11 物件的相容性

安全組合

在三個編譯物件(A、B)的場景中和C) 使用相同的編譯器版本產生:

  • A使用C 11標準編譯
  • B 使用C 14 標準編譯
  • C 使用C 17 標準編譯

...並假設:

  • ...並假設:
  • 標頭是用C 11編寫的
結構具有一致的語義所有三個標準

正確表達了相互依賴關係

...根據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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn