2016-11-15 33 views
1

我有兩個名爲libx.aliby.a靜態庫。混合兩個具有不同優化級別的靜態庫是否可行?

libx.a編譯時gcc -g;而liby.a則編譯爲gcc -O3

我想他們兩者聯繫到一個單一的可執行文件。

是否可行?

是否有害?

+2

我會說是,沒問題。 – Djee

+1

一般而言,優化是不應該影響代碼接口的,只是將其實現更改爲更高效的空間或速度等等。然而,編譯器可能會對程序和環境做出額外的假設,以便對其進行優化(例如,多線程是可能的)。我不知道一個好例子,但是優化器可能會認爲全部或者沒有代碼被優化,從而妨礙了互操作性。但這只是一個理論思想,我不知道是否有編譯器實際上假設這一點。所以,一般來說,這是可行的。 – Downvoter

+3

這樣想想吧。標準的C庫在很大程度上作爲一個對象庫來實現,並且已經對其進行了優化,但是運行與它關聯的未優化的程序是完全正常的。 –

回答

2

是的,這是可行的,它是無害的,只要優化不改變ABI(函數調用,或,浮點運算/代表等)。雖然在這些情況下,我相信所有必要的信息已經被編譯或鏈接器解決了這些問題。

相關問題