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