標題全文為:LLVM每日談之三十五 LLVM/Clang 6.0.0編譯中遇到的問題

註:因為知乎標題有字數限制,所以縮略了一下。


隨著LLVM/Clang版本的不斷升級,LLVM/Clang也在慢慢的變得龐大起來,這使得編譯其源碼的時間和空間的需求也在極速擴張。這兩天在虛擬機Ubuntu18.04上編譯LLVM/Clang 6.0.0的時候就遇到了這樣的問題。

首先,採用了傳統的cmake 、make方式編譯,沒有添加任何參數。這種情況下,默認編譯的是Debug模式,默認編譯的目標平台是所有。編譯時間長,這個無非是多等一下子。在編譯中出現了編譯Clang的時候,報文件太大的錯誤。根據網上所搜集到的信息,我擴充了SWAP的空間。同時,為了節省編譯時間,給cmake傳遞了參數「-DLLVM_TARGETS_TO_BUILD=X86」,讓這次編譯只編譯X86平台。

其次,在編譯的過程中,依然出現了問題,還是在編譯clang的時候,這次出現的問題是「x86_64-linux-gun-ld: failed to set dynamic section sizes: Memory exhausted」。四處查找了一下,在stackoverflow找到了同樣的問題。地址:stackoverflow.com/quest 根據問題下的建議,我選擇了給cmake傳遞參數「-DLLVM_USE_LINKER=gold」使用gold代替ld。這次順利編譯成功。

最後,如果不是非要Debug版本進行調試,可以直接給cmake 傳遞:

「-DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_USE_LINKER=gold 」這幾個參數。這樣可以直接編譯只針對X86平台的Release版本,並且使用gold這個linker代替ld。這樣既能節省時間,也不會因為空間的問題編譯不通過。

推薦閱讀:

查看原文 >>
相关文章