月下博客

CentOS 6.X升级GCC G++最新版本v6.3.0,CentOS 6.X升级最新GCC G++ v6.3.0

CentOS 6.X 升级GCC G++ (当前最新GCC/G++版本为v6.3.0)

1、 获取安装包并解压,本人喜欢用backup作为下载的目录

mkdir /backup
cd /backup
wget https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
tar -jxvf gcc-6.3.0.tar.bz2

当然,https://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本供下载,最新版本已经有6.3.0啦.

建议下载.bz2的压缩包,文件更小,下载时间更少

2、 下载供编译需求的依赖项

参考文献[1]中说:这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
由于好奇心态,我编辑download_prerequisites文件时发现他下载的依赖库较旧,所以自己编辑更新了一次,你可以选择更新它:下载地址

cd gcc-6.3.0
./contrib/download_prerequisites

3、 建立一个目录供编译出的文件存放

mkdir gcc-build-6.3.0
cd gcc-build-6.3.0

4、 生成Makefile文件

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

5、 编译

make -j4

-j4选项是make对多核处理器的优化,如果不成功请使用 make,相关优化选项可以移步至参考文献[2]。


(注意:此步骤非常耗时,我虚拟机耗时近3小时; 实体机近80分钟,CPU基本是满的,内存也使用不少)

6、 安装

make install

(安装需要root权限!)

mv /usr/bin/gcc /usr/bin/gcc.bckup
ln -s /usr/local/bin/gcc /usr/bin/gcc

查看安装

ls /usr/local/bin | grep gcc

7、 重启,然后查看gcc版本

gcc -v

8、 写个C++11 特性的程序段 测试

tryCpp11.cc 代码省略....
g++ -std=c++11 -o tryCpp11 tryCpp11.cc

9、升级gcc,生成的动态库没有替换老版本gcc的动态库

源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。

9.1 运行以下命令检查动态库:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

从输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。

9.2 执行以下命令,查找编译gcc时生成的最新动态库:

find / -name "libstdc++.so*"

将上面的最新动态库libstdc++.so.6.0.22复制到/usr/lib64目录下

cd /usr/lib64
cp /backup/gcc-6.3.0/gcc-build-6.3.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./

9.3 删除原来软连接:

rm -rf libstdc++.so.6

或者:

mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6_backup
ln -s /usr/local/lib64/libstdc++.so.6.0.22 /usr/lib64/libstdc++.so.6

9.4 将默认库的软连接指向最新动态库:

ln -s libstdc++.so.6.0.22 libstdc++.so.6

9.5 默认动态库升级完成。重新运行以下命令检查动态库:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

可以看到 输出有"GLIBCXX_3.4.22" 了

官方QQ群号码:922069959(空)1093596563(空)

您可能感兴趣的文章