一、系統環境
系統:CENTOS7.7.1908
內核:3.10.1062
GCC: 4.8.5 GLIBC: 2.17 MAKE: 3.8.2
二、編譯准備
正式編譯安裝前,要具備基本的編譯環境,可安裝系統自帶的 “Development Tools”。其它可參考源自LFS9.2手冊中的環境要求:這里
yum groupinstall "development tools" yum install dejagnu texinfo
解壓源碼包並進入,建立build目錄,運行自帶依賴包下載程序。
tar xvf gcc-9.2.0.tar.xz cd gcc-9.2.0.tar.xz mkdir build ./contrib/download_prerequisites cd build
躲避坑1:automake的版本有特殊要求,只能使用1.15.1(此處下載)。因為在多次編譯失敗中發現,automake不能低於1.15(但1.15版本也報錯,只認1.15.1版本,也不能高於1.16,不被識別)。使用的依賴包均為當時最新版本,gmp6.1.2 mpc1.1.0 mpfr4.0.2 isl0.21。這樣不會出現報錯。再多提一句,如果直接將依賴包編譯安裝進系統,gmp6.1.2可能會報錯,提示庫文件版本不一致(bug?)可以選擇6.0.0或6.1.0版本。
tar xvf automake-1.15.1.tar.xz cd automake-1.15.1 ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.15.1 make make -j4 check make install
下面正式開始編譯,運行命令:
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib --prefix=/usr/local
躲避坑2:多次慘痛的教訓,為了提高系統安全性,強烈建議不要直接安裝在/usr目錄中覆蓋原版本。通常像GCC、GLIBC這樣關鍵的升級如果運氣不好,安裝中途失敗,可是會死人的。可以安裝在/usr/local或/opt中,這樣即使出錯了,系統也會找到原版本不至於崩潰。另外建議最好提前用tar備份一下系統,可以根據個人情況自行調整一下命令:
tar -Jcvpf /home/PT/ntfsa/sources/backup191008.tar.xz / \ --exclude=home/PT \ --exclude=usr/src/* \ --exclude=tmp/* \ --exclude=proc \ --exclude=mnt/* \ --exclude=sys/* \ --exclude=dev \ --exclude=run \ --exclude=media/* \ --exclude=var/cache/yum \ --exclude=var/*.log \ --exclude=lost+found \ --exclude=usr/lost+found \ --exclude=home/lost+found \ --exclude=boot/lost+found \ --exclude=var/lost+found \ --exclude=usr/local/lost+found
前面都滿足了的話,后面也沒遇到什么問題。按部就班執行命令,值得一說的就是make -j4,后面的參數如果不着急時間就不要加,有時候用多線程編譯會出現找不到文件或正在使用中的意料之外的錯誤。
make make install
安裝完成后,執行gcc -v查看一下GCC版本,如果版本號沒變,就需要再做下一步:
mv /usr/bin/gcc /usr/bin/gcc-4.8.5 mv /usr/bin/g++ /usr/bin/g++-4.8.5 mv /usr/local/bin/gcc /usr/local/bin/gcc-9.2.0 mv /usr/local/bin/g++ /usr/local/bin/g++-9.2.0 alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 10 \ --slave /usr/bin/g++ g++ /usr/bin/g++-4.8.5 alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-9.2.0 20 \ --slave /usr/bin/g++ g++ /usr/local/bin/g++-9.2.0 alternatives --config gcc
選擇9.2.0版本序號,完成。