llvm編譯失敗幾句話總結


這里就不重復說LLVM編譯的方法了,網上一大堆。(直接看官方文檔是最好的)

單說大概的問題和解決方法。

 

等等!說之前先插一句:如果你跟我一樣是為了種種原因第一次折騰,那還是不要自己編譯了,llvm官網有pre-build版本的,直接下下來然后在linux環境變量里面添加路徑直接用就好了,這個網上也有說,這里就不講了

 

但是如果需要調試,那還是要編譯debug版本,那就沒辦法了,按照網上教程折騰吧

出錯了 直接百度報錯信息進行排查,如果所有的問題都排查了(報錯信息都解決了),還是編譯失敗,那在make(或者ninja)的時候,少用-j(我試過用服務器編譯,直接-j128,並沒有快多少),不過用不用多線程編譯屬於玄學的解決問題方式了,這個方法優先度比較低,還是優先從問題出在別的地方來考慮比較好。

 

大部分時候,編譯失敗都是因為這三點:

1.缺少依賴的軟件

解決方法,去官網,把上面提到的所有軟件全部裝了

https://llvm.org/docs/GettingStarted.html#checkout

2.磁盤不夠大

llvm是真的編譯出來超大,直接虛擬機磁盤拉到200G,就不用考慮這個問題了(親測llvm9.0.1版本debug編譯,只加clang,編譯出來61G)

3.內存不夠

這個點我是真的沒想到的,等了半天以為編譯好了,進去一看發現報錯

c++: internal compiler error: Killed (program cc1plus)

一查發現是內存不足,直接吐了

2G內存不夠你吃的海星,想當年我開kali只分給500m的

奈何本人電腦只有8G,遂關掉虛擬機,內存拉到5G再來

然后就看到內存占用幾秒的時間里一下從21%飆到87%

好的是我輸了,垃圾電腦不配編llvm

后面還一度升到97%,然后又報錯了,(5G都不夠你吃的wtf)然而我的內存條已經一滴都沒有了。所以物理機內存不夠的同學還是加個swap分區吧,參考下面鏈接

http://xwsoul.com/posts/684


 gcc 編譯出現 internal compiler error: Killed

internal compiler error: Killed (program cc1plus)

在 640M 內存的 vps 做編譯的時候出現了上述錯誤.
幾經搜索, 才發可能是系統沒有交換分區, 編譯過程中內存耗盡, 導致了編譯中斷 …
解決方式也很簡單, 就是增加一個交換分區:

1. 創建分區文件, 大小 2G

dd if=/dev/zero of=/swapfile bs=1k count=2048000

2. 生成 swap 文件系統

mkswap /swapfile

3. 激活 swap 文件

swapon /swapfile

這樣就木有問題了, 但是這樣並不能在系統重啟的時候自動掛載交換分區, 這樣我們就需要修改 fstab.
修改 /etc/fstab 文件, 新增如下內容:

/swapfile swap swap defaults 0 0

這樣每次重啟系統的時候就會自動加載 swap 文件了.

同時,如果系統默認設置得很小,需要加上命令,使得系統積極使用交換內存

sudo sysctl vm.swappiness=100


 

就這幾點了,寫的很簡略,對於別人來說可能沒有解決問題的參考價值,也就是我個人發發牢騷而已。從今年年初開始到現在我一共出現了3次需要編譯llvm的情景,每次都會出現各種玄學問題卡我至少一天以上。。。心累啊

 

再次補充,我以為可以了,結果還剩1/3還是報錯,這次的錯誤又不一樣了,先放張圖

 

 可以看到錯誤是這個

collect2: fatal error: ld terminated with signal 9

經過查閱,居然有前輩也是編譯llvm的時候遇到了這個錯誤並且解決了,是下面這個鏈接

https://blog.csdn.net/vincentuva/article/details/83111447

我往下一看,果然還是內存分配不足的問題。。。

直接分20G!就不信你20G都能吃掉

未完待續。。。。。

9.5早上:一晚上過去了,還剩十分之一的文件沒編譯完,我真是¥&%&

看了下在編譯clang9,查了下這個文件編譯出來估計有2.7G這么大,因為debug編譯有很多符號,行吧。。。

終於編譯完了。總結經驗,我個人的編譯,物理機8G內存條,分了4G給虛擬機(試過給5G,會崩所以還是4G好一點),然后交換分區給了25G,實際觀察最高能吃掉15G多一點左右。然后ninja -j最好能單線程編譯就單線程,慢點是慢點,但是至少不會崩或者卡住。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM