總結一下,假如你在平臺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 |