簡體   English   中英

具有不匹配的優化級別(-O3、-O2、-O1、-O0)的二進制文件是否會導致穩定性問題?

[英]Does having binaries with mismatched optimization levels (-O3, -O2, -O1, -O0) cause stability issues?

具有不匹配的優化級別(-O3、-O2、-O1、-O0)的二進制文件是否會導致穩定性問題? 例如,如果 app.exe 是 -O2,而 libapp.so 是 -O3,或者 app.o 是 -O2,而 libxyz.a 是 -O3?

通常不會,優化級別不匹配不會導致穩定性問題。

理論上,一個特別糟糕的庫可以根據實現定義的預處理器宏更改其二進制接口,該宏是基於優化級別定義的,在這種情況下可能會出現問題。

這在我的經驗中並不常見。 一個更常見的問題是NDEBUG宏(和類似的)。

單獨優化級別不會影響它,但經常優化級別與一些影響構建的宏相結合,從而導致 ABI 問題。 例如,在 MSVC 中,如果它被鏈接到調試模式應用程序,如果它接受對std::string的引用作為某些函數的輸入(不是那個應該有std::string或引用它作為共享庫中的輸入)。

此外,如果庫和應用程序是使用不同的編譯器/選項構建的,如果庫的接口使用任何復雜類,則可能會出現一些 ABI 問題。 您應該檢查編譯器文檔以獲取該信息。

此外,如果代碼中存在錯誤,那么優化級別可能會改變錯誤的行為,從而導致優化級別之間出現一些奇怪的不一致。

暫無
暫無

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

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