1
我有兩個名爲libx.a
和liby.a
靜態庫。混合兩個具有不同優化級別的靜態庫是否可行?
libx.a
編譯時gcc -g
;而liby.a
則編譯爲gcc -O3
。
我想他們兩者聯繫到一個單一的可執行文件。
是否可行?
是否有害?
我有兩個名爲libx.a
和liby.a
靜態庫。混合兩個具有不同優化級別的靜態庫是否可行?
libx.a
編譯時gcc -g
;而liby.a
則編譯爲gcc -O3
。
我想他們兩者聯繫到一個單一的可執行文件。
是否可行?
是否有害?
是的,這是可行的,它是無害的,只要優化不改變ABI(函數調用,或,浮點運算/代表等)。雖然在這些情況下,我相信所有必要的信息已經被編譯或鏈接器解決了這些問題。
我會說是,沒問題。 – Djee
一般而言,優化是不應該影響代碼接口的,只是將其實現更改爲更高效的空間或速度等等。然而,編譯器可能會對程序和環境做出額外的假設,以便對其進行優化(例如,多線程是可能的)。我不知道一個好例子,但是優化器可能會認爲全部或者沒有代碼被優化,從而妨礙了互操作性。但這只是一個理論思想,我不知道是否有編譯器實際上假設這一點。所以,一般來說,這是可行的。 – Downvoter
這樣想想吧。標準的C庫在很大程度上作爲一個對象庫來實現,並且已經對其進行了優化,但是運行與它關聯的未優化的程序是完全正常的。 –