系統環境: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 ...
系統環境: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
到這裡才算是收工了。
參考鏈接: