Centos7升級gcc學習筆記
阿新 • • 發佈:2018-11-16
到官網下載gcc,也可以直接在這裡下載:http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/ 下載好後進行編譯安裝:
tar -xvf gcc-8.2.0.tar.gz cd gcc-8.2.0 ./contrib/download_prerequisites mkdir build cd build ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib make(建議不要使用make -j來編譯,雖然可以縮短編譯時間,但極大可能會編譯失敗) make install
其中執行./contrib/download_prerequisits
將自動下載以下幾個檔案,這個幾個檔案在gcc編譯時需要:
- mpfr-2.4.2.tar.bz2
- gmp-4.3.2.tar.bz2
- mpc-0.8.1.tar.gz
- isl-0.15.tar.bz2
編譯過程十分漫長
配置gcc
find / -name "libstdc++.so*"
# cd /usr/lib64 # cp /home/gcc-8.2.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25 . # mv libstdc++.so.6 libstdc++.so.6.old # ln -sv libstdc++.so.6.0.25 libstdc++.so.6
完成後需要重啟電腦:
init 6
重起後就可以通過gcc -v來檢視gcc版本,現在已經是8.2.0了,所以我決定寫一個小程式來測試一下,編譯程式沒有問題,但是執行的時候出現"./a.out: /lib64/libstdc++.so.6:version 'GLIBCXX_3.4.21' not found(required by ./a.out)",所以接下來需要解決這個問題。
解決執行程式gcc出現'GLIBCXX_3.4.21' not found
這是因為升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫導致的,將gcc最新版本的動態庫替換系統中老版本的動態庫即可解決,執行以下命令檢查動態庫:
strings /lib64/libstdc++.so.6 | grep GLIBC
以下是輸出結果:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
從輸出結果可以看到並沒有“GLIBCXX_3.4.21“,所以可以斷定我們的程式執行時動態載入的是老的動態庫,解決這個問題需要將當前連結檔案的連結指向改成最新的動態庫地址:
cp /usr/local/lib64/libstdc++.so.6.0.21 /lib64
cd /lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.21 libstdc++.so.6
然後你可以執行以下命令來檢視'GLIBCXX_3.4.21'已經可以找到了:
strings /lib64/libstdc++.so.6 | grep GLIBC