总结一下,假如你在平台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 |