2014-12-01 46 views
16

作爲Linux發行版中的下游維護者,我通常維護的一些軟件包開始在其代碼庫中使用C++ 11功能。它們都依賴於Linux發行版打包的不同庫。在當前的Linux發行版上打包C++ 11軟件是否安全?

Problems with the ABI將C++ 11代碼與C++ 98和AFAIK混合時,當編譯軟件生成軟件包時,大多數當前的主要Linux發行版默認不啓用C++ 11標誌。

問題是:主要的Linux發行版如何處理C++ 11代碼的入口?使用系統庫時,是否有體面的方式來檢查或避免ABI的這些問題?

謝謝。

+8

你能否提供一個關於「大多數當前主要的Linux發行版都沒有啓用C++ 11標誌」的參考? – DRC 2014-12-01 18:36:01

+1

你在混合g ++版本嗎?如果不是這樣,我相信這個問題已經在GCC 4.8中修復了 – Mgetz 2014-12-01 19:25:38

+0

@Mgetz 4.8.1至少還有一個提到的問題,4.8.2提到了幾個非常小的問題。 – Yakk 2014-12-01 19:54:37

回答

2

該問題與C++ 11與C++ 98無關,只是C++ 11可以激發二進制更改。由C++ 11驅動的二進制變化沒有什麼特別之處。它們就像普通的二進制變化一樣破壞或不破壞。此外,只有當圖書館維護者專門選擇更改他的二進制界面時纔會更改它們。

換句話說,除非庫明確選擇爲不同的標準版本提供兩個不同的二進制接口(這仍然是一個庫選擇),否則這與標準版本以及與該庫有關的所有事情無關。除了這種情況之外,您在C++ 98中與在C++ 11中一樣破碎。 Itanium在C++ 11支持版本和C++ 98支持版本之間向後兼容,因此編譯器ABI不會中斷。

從內存中,除非你使用4.7.0版本,它們爲了獲得樂趣而不會破壞,那麼使用libstdC++就會非常安全 - 它們可以在將來的版本中存儲ABI破解, 。換句話說,儘管C++ 11的過渡期可能會引入額外的動機來打破ABI並因此帶來額外的風險,但實際上使用C++ 11本身並不會帶來任何額外的風險。

相關問題