沒有root權限怎麼解決GLIBCXX版本太低的問題 / gcc與GLIBCXX的版本對應

總結一下,假如你在平臺A編譯的程序,放在平臺B上跑:

  • 如果報錯提示GLIBC版本低,那千萬不要手動升級GLIBC,不然會出現很多問題,系統都有可能崩潰。最好的解決方案就是在平臺B上重新編譯。
  • 如果報錯提示GLIBCXX版本低,那就有兩種解決方案,要麼在平臺B重新編譯,要麼手動升級平臺B的GLIBCXX。

————————————————分割線——————————————————

在租的服務器上跑程序,結果出現了:

libstdc++.so.6: version `GLIBCXX_3.4.20' not found

libstdc++.so.6: version `GLIBCXX_3.4.21' not found

原來是因爲服務器的gcc版本太低,所以需要升級gcc

可是又沒有root權限,沒辦法用yum來直接把相關的依賴包全部裝好,只能去下載源碼來一個一個編譯安裝。。

我裝的是gcc5.3.0,可以在這個鏡像站上找到所有的tar.gz包: http://mirror.hust.edu.cn/gnu/gcc/

gcc需要gmp4.2+  mpfr2.4.0+  mpc0.8.0+  鏈接就不放了

安裝先後順序:gmp、mpfr、mpc、gcc

安裝這幾個庫時,在configure的時候有時需要添加依賴包的位置,例如在進行gcc的configure時,需要加上前三個庫的安裝位置:

./configure --with-gmp=安裝gmp的絕對路徑 --with-mpfr=安裝mpfr的絕對路徑 --with-mpc=安裝mpc的絕對路徑

 

然後再make、make install

make install的時候因爲沒root權限,所以記得在有權限的路徑中安裝:

make install DESTDIR=一個你擁有權限的路徑

 

修改~/.bashrc,添加PATH和LD_LIBRARY_PATH

export PATH=裝gcc的路徑裏的/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
export LD_LIBRARY_PATH=裝gcc的路徑裏的/usr/local/lib64:$LD_LIBRARY_PATH

再source ~/.bashrc

問題解決

————————————————————————————————————————

查看當前支持的GLIBC版本號的語句:

strings /lib/x86_64-linux-gnu/libc.so.6|grep GLIBC

查看當前支持的GLIBCXX版本號的語句:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6|grep GLIBCXX

目前已知的gcc版本與其最高支持的GLIBCXX的關係如下:

gcc GLIBCXX
4.4.7 3.4.17
4.8.5 3.4.19
5.2.0 3.4.21
7.3.0 3.4.25

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章