centos7自带的GCC是比较老的,gcc -v可以看到版本是4.8.5,在yum中也能看到最高版本也是这个版本4.8.5:yum list gcc。
用这个比较老的GCC版本,在运行一些软件的时候,常会报错:
CXXABI_1.3.8 not found
GLIBCXX_3.4.20 not found
用下面2个命令可以看到上述这2个确实不存在
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
解决这个问题,只有一条路可以走,那就是升级GCC到更高的版本,GCC官网上的版本已经到了很高的版本9了,我个人觉得没有必要用这么高的版本,折衷一下,选个GCC 6.5.0 这个版本即可。
下面是GCC的升级之路,整个过程大概耗时3个小时,要有心理准备:
1,下载GCC 6.5.0:http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-6.5.0/gcc-6.5.0.tar.gz,或者到官网找更好的mirror下载,https://gcc.gnu.org/mirrors.html,我选了个日本的镜像,很遗憾没有国内的。
2,假设 gcc-6.5.0.tar.gz 在 /opt 下面,tar xzvf gcc-6.5.0.tar.gz && cd gcc-6.5.0
3,升级之前,需要做好下面2个准备工作:
3.a:yum -y install gcc-c++ , 否则在升级的时候会报错:error: C++ preprocessor “/lib/cpp” fails sanity check
3.b:cd /opt/gcc-6.5.0,然后运行 sh contrib/download_prerequisites,必须在/opt/gcc-6.5.0下面,否则运行download_prerequisites的时候就会报错;这个脚本将会下载4个小文件(每个文件1M左右),但是因为网络的因素,下载了半天才下载完。这个必须要运行,否则在GCC升级的时候就会报错什么:GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+这些找不到。
4,准备工作做好了,开始吧:./configure –disable-multilib,disable-multilib表示仅仅需要64位的GCC,不需要32位的GCC,假如在centos7安装的时候没有选上32位的GCC,那么在这里必须要 –disable-multilib,否则就会报错。
5,make,这个过程最长了,估计要1个多小时。
6,make install,非常快
7,装好后,gcc -v,确实已经升级到了 6.5.0 版本,但是假如运行前面报错的软件的话,还是会报以前的错误,用刚才的strings命令去看,也是缺少那2个,这是什么原因呢?
8,这是因为,gcc升级安装在了 /usr/local/lib64下面,而运行的软件只认 /usr/lib64 这个位置,所以最后还需要 cp /usr/local/lib64/libstdc++.so.6 /usr/lib64/,这样就全部搞定了
最后说一下,GCC的升级就是比较耗时点,但是难度不大,严格按照我上面的步骤,很容易搞定的。