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
