參考連接:https://www.cnblogs.com/BinBinStory/p/7499527.html
https://blog.csdn.net/llwy1428/article/details/95473542
https://blog.csdn.net/u011181989/article/details/91334478
環境:centos 7.6 最小化安裝
需要准備的包以及說明
Centos 7.6 everything 包 用於掛載本地鏡像安裝相關依賴包
llvm-8.0.0.src.tar compiler-rt-8.0.0.src.tar clang-tools-extra-8.0.0.src.tar cfe-8.0.0.src.tar llvm8.0.0相關軟件包
cmake-3.9.6.tar.gz 編譯llvm需要的cmake包,版本不低於3.4.3
gcc-5.5.0.tar.gz 編譯需要的gcc版本不能低於5.1,centos 7.6原帶的版本是4.X
gmp-4.3.2.tar.bz2 升級gcc版本所需要的依賴包
mpc-0.8.1.tar.gz 升級gcc版本所需要的依賴包
mpfr-2.4.2.tar.bz2 升級gcc版本所需要的依賴包
開始,如果想一次報錯都不出現,請把文檔看完,先解決編譯安裝llvm的基礎環境之后再安裝,本次安裝使用的全新的操作系統,關閉了防火牆和selinux,嘗試直接編譯llvm,並遇見報錯,解決報錯的過程。
上傳軟件包到/root下,升級gcc版本的主程序和依賴包上傳到/root/gcc目錄下
解壓llvm相關的軟件包
tar xvf cfe-8.0.0.src.tar
tar -xvf clang-tools-extra-8.0.0.src.tar
tar -xvf compiler-rt-8.0.0.src.tar
tar -xvf llvm-8.0.0.src.tar
執行改名,移動操作,讓clang,clang-tools-extra和compiler-rt就可以和llvm一起編譯
mv cfe-8.0.0.src clang
mv clang/ llvm-8.0.0.src/tools/
mv clang-tools-extra-8.0.0.src extra
mv extra/ llvm-8.0.0.src/tools/clang/
mv compiler-rt-8.0.0.src compiler-rt
mv compiler-rt llvm-8.0.0.src/projects/
在llvm-8.0.0.src同級目錄上新建目錄,名稱為build-8.0.0
mkdir build-8.0.0
cd build-8.0.0/
然后執行cmake編譯
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/clang -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On ../llvm-8.0.0.src/
提示沒有cmake,下面掛載光盤安裝cmake
yum install -y cmake
再次執行cmake編譯
報錯cmake版本太低,不能低於3.4.3
下面解決cmake版本低的問題,升級cmake到3.9.6版本,首先准備好包,
安裝gcc gcc-c++包以執行編譯
yum install gcc gcc-c++ -y
卸載原有的cmake
yum remove cmake -y
解壓所新版本的cmake並編譯安裝
tar -zxvf cmake-3.9.6.tar.gz
cd cmake-3.9.6
./configure --prefix=/usr/local/cmake
make -j3
make install
創建軟連接
ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake
查看cmake版本
cmake -version
至此,cmake版本升級結果,下面再次嘗試編譯llvm
cd /root/build-8.0.0/
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/clang -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On ../llvm-8.0.0.src/
又報錯了
這次報錯提示c++版本為4.8.5,推薦的版本不能低於5.1
下面開始升級c++版本
進入之前准備好的gcc目錄,解壓,安裝gcc軟件包和相關依賴包並且創建連接
tar xvf gcc-5.5.0.tar.gz
cp gmp-4.3.2.tar.bz2 mpc-0.8.1.tar.gz mpfr-2.4.2.tar.bz2 /root/gcc/gcc-5.5.0
cd gcc-5.5.0
yum install -y bzip2
tar -xjf mpfr-2.4.2.tar.bz2
ln -sf mpfr-2.4.2 mpfr
tar xjf gmp-4.3.2.tar.bz2
ln -sf gmp-4.3.2 gmp
tar xzf mpc-0.8.1.tar.gz
ln -sf mpc-0.8.1 mpc
編譯gcc-c++和gcc
./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
執行make 和make install
時間較長,使用make -j3 使用3線程執行make ,使用3線程make大概執行了40分鍾
make -j3
make install
添加環境變量
vi /etc/profile
export PATH=/usr/local/gcc/bin:$PATH
生效
source /etc/profile
查看gcc版本
已經升級成功
下面繼續llvm的安裝
依然報錯版本不夠,有可能的系統存在多個版本的gcc cmake還沒有默認使用的自帶的gcc 還是舊版本,這時候給添加編譯參數,指定gcc路徑。命令如下
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/clang -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On -DCMAKE_CXX_COMPILER=/usr/local/gcc/bin/c++ -DCMAKE_C_COMPILER=/usr/local/gcc/bin/gcc ../llvm-8.0.0.src/
依然報錯
報錯配置不完整,但是程序已經更新了下面的gcc的變量,所以只需要再次執行cmake編譯即可
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/clang -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On -DCMAKE_CXX_COMPILER=/usr/local/gcc/bin/c++ -DCMAKE_C_COMPILER=/usr/local/gcc/bin/gcc ../llvm-8.0.0.src/
cmake編譯成功,執行make -j3 操作
make -j3
時間較長,后續還有報錯,耐心等待。
報錯了,這個報錯是因為升級gcc之后動態鏈接庫中缺少GLIBCXX_3.4.20和GLIBCXX_3.4.21文件導致,以下為修改該錯誤的過程
查看現有動態鏈接庫的文件
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
查找系統上所有的libstdc++.so文件
find / -name "libstdc++.so*"
復制需要的libstdc++.so文件到/usr/lib64目錄
cp /usr/local/gcc/lib64/libstdc++.so.6.0.21 /usr/lib64
刪除舊版本的libstdc++.so.6文件
cd /usr/lib64/
rm -rf libstdc++.so.6
創建鏈接到新版本的libstdc++.so.6文件
ln -s libstdc++.so.6.0.21 libstdc++.so.6
查看更新后的libstdc++.so.6文件包含的動態鏈接庫
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
可以看到上面報錯缺少的GLIBCXX_3.4.20和GLIBCXX_3.4.21文件已經存在
繼續make j3
cd /root/build-8.0.0/
make -j3
已經解決百分之28時的報錯。至此錯誤都已解決,靜靜等待make完畢,速度較慢,4核8G的虛擬機,估計要40分鍾甚至更多。
make 完成
下面執行make install
安裝完成
cd /usr/local/clang/
./clang --version