簡體   English   中英

用更新的GCC版本替換GCC的系統級C ++運行時是否安全?

[英]Is it safe to replace GCC's system-level C++ runtime with a version from newer GCC?

Linux C ++程序使用針對libgcc_s.so.1libstdc++.so.6庫的GCC鏈接構建,每個庫包含多個ABI:較新版本包含先前版本的ABI和新版本的ABI。 GCC ABI策略文檔說,應該能夠使用新的運行時運行針對舊運行時構建的程序。 因此,從理論上講,較舊的二進制文件應該可以在新系統上運行。

如果我的系統具有較舊的運行時並且不想在此系統上遇到升級GCC的麻煩,我可以手動用新的庫替換上面提到的庫嗎? 從理論上講,與之相關的所有舊的可執行文件都應該可以工作(包括GCC本身),但它感覺就像一個kludge。

這樣做是否安全?

也許 ,但我不推薦它,至少沒有經過大量測試幾乎肯定會吃掉任何收益。 原因如下:

  • “ABI兼容”不一定是“bug兼容”。 即使保持了ABI兼容性,如果他們以某種方式依賴於以前版本的庫中不正確的行為,您的應用程序仍可能以驚人的方式中斷。
  • 可能會有新的錯誤最終破壞您的應用程序,同樣沒有ABI不兼容。
  • 如果您沒有完全正確地編譯新庫,它們可能兼容ABI。
  • 您確定原始庫是從原始GNU源編譯的嗎? 也許有一些你不知道的補丁。 如果您無法確定,則無法確定現有系統/應用程序的兼容性。

你的目標是什么? 如果您只是希望能夠編譯使用更新功能的C ++應用程序,您可以安裝新版本的GCC和原始版本,您只需要確保您可能使用的所有庫都是使用新版本構建的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM