linux升級gcc


情景如下:

  • CentOS7, python3, 以及python3的pip(命名為pip3)

  • 執行 pip3 install sxtwl 時,報錯: 省略N字......-std=c++11 , 總之就是不支持-std=c++11

  • 查閱資料,需要升級gcc,yum只到4.8.5版本, 只好編譯安裝, 目前最新已經9.x了, 我下載的6.1.0

下載gcc源碼

yum -y install bzip2.x86_64   
  • 解壓
tar -jxvf gcc-6.1.0.tar.bz2

下載供便利需要的依賴項

cd gcc-6.1.0

./contrib/download_prerequisites 

sudo yum install  gmp  gmp-devel  mpfr  mpfr-devel  libmpc  libmpc-devel

建立一個目錄供編譯出的文件存放

mkdir gcc-build-6.1.0

cd gcc-build-6.1.0

生成Makefile文件

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

編譯安裝

make -j4
  • -j4選項是make對多核處理器的優化,如果不成功請使用 make,這里我使用的make

  • (注意:此步驟如果能正常運營,則非常耗時,在我寫這篇文章時,已經過40分鍾了,還沒完成。如果有錯誤的話,一般最多一兩分鍾就停下來了)

  • PS:如果提示還缺少其它包,請下載錯誤提示中包后,重新編譯

比如在這個過程中,我又執行了如下兩個命令安裝相關依賴
yum install m4 
yum install gcc-c++
  • 再次 make

  • make install

  • 重啟 ,執行 gcc -v查看版本 已經6.1.0,可以使用了

替換老版本gcc動態庫

  • 源碼編譯升級安裝了gcc后,編譯程序或運行其它程序時,有時會出現類似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found的問題。這是因為升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫導致的,將gcc最新版本的動態庫替換系統中老版本的動態庫即可解決。
find / -name "libstdc++.so*"
  • 結果如下:
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libstdc++.so
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/local/lib64/libstdc++.so.6.0.22
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so
/usr/local/lib64/libstdc++.so.6.0.22-gdb.py

  • 刪除並備份原文件 (注意:每個人的文件路徑可能稍有差異,但文件名是一樣的 )
mv /usr/lib64/libstdc++.so.6 /home/usr_lib64_libstdc++.so.6
  • 將新版本gcc動態庫導入
ln -s /usr/local/lib/libstdc++.so.6.0.22 /usr/lib64/libstdc++.so.6

  • 重新編譯運行

  • 此時在執行 pip install sxtwl 就能正常安裝了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM