0.為什麼是GCC7.5
CentOS7 自帶的 gcc/g++ 版本是 4.8,如果沒有安裝,可以通過 yum 指令安裝。
由于 gcc/g++ 4.8 完全支援 C++ 11,支援部分 C++ 14,不支援 C++ 17,而完全支援 C++ 17 的是 g++ 7 及以上版本:
個人不太建議安裝GCC8.X,太新的編譯器,所需要的依賴包、各種環境都需要最新版本,安裝過程中會出現很多問題。而且還不一定那麼穩定。
本着夠用就好的原則,GCC7.5完全支援C++17,是最理想的選擇。
1.下載下傳源碼,解壓
經測試,這個 https://ftp.gnu.org/ 位址還是很快的,而且是完整的,不想有些地方下載下傳的是有缺檔案的!!!!
wget https://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.xz
tar -zxf gcc-7.5.0.tar.xz
2.下載下傳依賴
我們可以直接用自帶的腳本完成
cd gcc-7.5.0
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
3.編譯安裝
編譯比較耗時,我用了七八十分鐘;雙核cpu, 是以 make 參數 `-j2` :
mkdir gcc-build-7.5.0
cd gcc-build-7.5.0
make -j2 && make install && date
4.更新動态庫
這個,我編譯安裝後,好像 不用更新,添加PATH路徑 /usr/local/lib64 就可以了。
[root@wsvr cmake-build]# ll /usr/local/lib64/libstdc++.so*
lrwxrwxrwx 1 root root 19 12月 17 13:10 /usr/local/lib64/libstdc++.so -> libstdc++.so.6.0.24
lrwxrwxrwx 1 root root 19 12月 17 13:10 /usr/local/lib64/libstdc++.so.6 -> libstdc++.so.6.0.24
-rwxr-xr-x 1 root root 11587712 12月 17 13:10 /usr/local/lib64/libstdc++.so.6.0.24
-rw-r--r-- 1 root root 2397 12月 17 13:10 /usr/local/lib64/libstdc++.so.6.0.24-gdb.py
[root@wsvr cmake-build]# ll /usr/lib64/libstdc++.so*
lrwxrwxrwx 1 root root 19 12月 16 19:36 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x 1 root root 995840 9月 30 10:17 /usr/lib64/libstdc++.so.6.0.19
如果程式運作報錯,檢查動态庫:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
從輸出可以看出,gcc的動态庫還是舊版本的。說明出現這些問題,是因為更新gcc時,生成的動态庫沒有替換老版本gcc的動态庫。
執行以下指令,查找編譯gcc時生成的最新動态庫:(在root權限下進行操作,後面都是,不再贅述)
find / -xdev -name "libstdc++.so*"
複制庫到 /usr/lib64
cp /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64
删掉舊的libstdc++.so.6(這是一個軟連結),建立新的libstdc++.so.6軟連結
rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6
5.更多參考
https://www.cnblogs.com/lzpong/p/5755678.html
https://www.cnblogs.com/FengGeBlog/p/12994103.html
https://www.cnblogs.com/music-liang/p/12900457.html
--- auth:lzpong