2013-07-17 48 views
3

我正在鏈接靜態庫,我想知道應該如何處理在llvm/Clang中的死代碼的剝離。我無法找到任何提示Clang具有一些等同於-Wl, - gc-section或-dead_strip的文檔。Clang在靜態鏈接期間刪除死代碼(gcc相當於-Wl, - gc-sections)

我認爲一些死代碼消除是在較高優化級別自動執行的,但gcc也是如此,對吧?然而,gcc通過上面提到的標誌提供了一些明確的控制。鏘沒有提供或我錯過了什麼?

(該系統是OSX)

回答

5

死汽提是接頭特性,而不是一個編譯器的功能。結果,gcc和clang都沒有。這就是爲什麼你不得不使用-Wl - 你將該標誌傳遞給鏈接器。 Mac OS X鏈接器使用-dead_strip。你可以直接將標誌傳遞給你的clang調用,它會自動傳遞它。

+0

'-fdce'可能指編譯器在每個函數內執行的類似優化*。編譯器能夠證明單個基本塊已經死亡是很常見的。 – zwol

+0

是的抱歉,不清楚。我的「優化級別參數」被稱爲-fdce,我認爲這是由編譯器運行的,而不是由鏈接器運行。但是,感謝你的回覆 - 看起來dead_strip是傳遞給鏈接器的命令,它確實減小了二進制文件的大小(它只在gcc的手冊頁中記錄,而不是在叮噹聲中記錄),我應該一直在閱讀ld的手冊頁來獲取它接受的標誌,而不是期望編譯器手冊包含哪些標誌可以發送:))。 – kamjagin