1. 程式人生 > >Centos7升級gcc學習筆記

Centos7升級gcc學習筆記

到官網下載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