系統環境:Centos7.4
今天在安裝 Nodejs8.7 的時候,報了一個警告:
WARNING: C++ Compiler too old, need g++ 4.9.4 or clang++ 3.4.2 (CXX=g++)
然后,查了一下自己系統上安裝的版本:4.8.5
好吧,不能用 yum 升級了,那就手動安裝了吧
一、選擇需要升級的版本
(我選擇了5.4.0)
二、獲取安裝包並解壓
cd /usr/local/src
wget https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.bz2
tar -jxvf gcc-5.4.0.tar.bz2
注:bz2是一種壓縮文件格式,若無法解壓,安裝 bzip2 即可:yum -y install bzip2
三、進入解壓后的gcc文件夾,下載供編譯需求的依賴項
cd gcc-build-5.4.0
./contrib/download_prerequisites
四、建立一個文件夾存放編譯文件
mkdir gcc-build-5.4.0
cd gcc-build-5.4.0
五、生成 Makefile 文件
make
注:這個過程非常耗時,我的1核1G內存大約花了一個來小時
六、安裝
sudo make install
七、重啟服務器,驗證版本
gcc -v
等了那么久,總算是成功了,很激動對不對?
但是!
我執行到上邊以后,屁顛屁顛的跑去編譯 nodejs 了,耍出了一個錯誤:
/usr/local/src/node-v8.7.0/out/Release/mksnapshot: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /usr/local/src/node-v8.7.0/out/Release/mksnapshot)
編譯失敗~ 勞資等了30分鍾
好吧,出了問題終究是要解決的
問題原因:升級gcc時,生成的動態庫沒有替換老版本 gcc 動態庫導致的
解決方案:將gcc最新版本的動態庫替換系統中老版本的動態庫。
(1). 查找編譯gcc時生成的最新動態庫
find / -name "libstdc++.so*"
(2) 將找到的動態庫libstdc++.so.6.0.21復制到/usr/lib64
cp /usr/local/src/gcc-5.4.0/gcc-build-5.4.0/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
(3). 切換工作目錄至/usr/lib64,刪除原來的軟連接, 將默認庫的軟連接指向最新動態庫。
cd /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.21 libstdc++.so.6
到這里才算是收工了。
參考鏈接: