在公司使用llvm開發編譯器,剛入門,嘗試在一個CentOS系統上編譯llvm的源碼,本文是對過程的簡要記錄以及遇到的一些問題的記錄。
操作步驟
下載llvm庫
cd /home/PWE/
git clone https://github.com/llvm/llvm-project.git
開始構建
cd llvm-project
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE="Debug" -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" ../llvm
ninja && ninja install
說明
- cmake這一步,只指定了構建類型和允許編譯子項目,構建類型不指定時默認也是Debug,可省略;另外沒有指定安裝路徑,所以會安裝到默認路徑
/usr/local
,如果需要指定,則使用-DCMAKE_INSTALL_PREFIX="../install_path/"
;其他參數請參考官網。 - cmake這一步,我使用了ninja作爲構建工具,因爲llvm官網推薦用ninja,如果要使用gnu make或其他工具,請參考官網。
##在這裏插入代碼片
遇到問題
-
提示缺少cmake
解決:安裝cmake,
sudo yum install cmake
,之後重新執行時,提示我cmake的版本過低,需要至少3.4版本,於是從網上下載了cmake的源碼,卸載低版本cmake,修改環境變量指向高版本cmake,參考:https://www.jianshu.com/p/b283fad5e4de -
提示缺少Ninja:
CMake Error: CMake was unable to find a build program corresponding to “Ninja”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
**解決:**安裝Ninja,按照要求編譯:
./configure.py --bootstrap
,之後把路徑下生成的ninja
複製到/usr/local/bin
下邊,參考:https://ninja-build.org/。注意在編譯ninja之前需要安裝re2c
,GLIBCXX_3.4.21
。安裝re2c
稍微麻煩一些,下載源碼後,編譯安裝,參考:https://www.24kplus.com/linux/549.html。 -
提示gcc版本過低,要求5.1以上版本
**解決:**安裝高版本gcc,源碼編譯安裝。當時這個問題困擾了我很久,原因是編譯gcc升級高版本這件事本身就陷阱重重,編譯過程中遇到不少問題,後來也沒有成功。最後的解決方案是安裝了高版本的CentOS,之前是6.9,後來改成了8,CentOS 8上自帶的gcc是8.2.1版本,問題自然解決。
-
提示缺少高版本的GLIBCXX
ninja: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found (required by ninja)
ninja: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20’ not found (required by ninja)
**解決:**因爲在升級gcc之後,沒有更新新版本的動態庫。將編譯新版本gcc的路徑下的lib64中的libstdc++.so.6.0.21複製到
/usr/lib64/
下邊,然後修改下邊的軟鏈接到這個庫ln -s libstdc++.so.6.0.21 libstdc++.so.6
。參考:https://itbilu.com/linux/management/NymXRUieg.html