CentOS6.5升级gcc到4.8总结

操作系统是CentOS6.8的32位版本,yum自带的gcc版本为4.4.7,不支持C++11特性。所以需要升级到4.8.5,至少要升级到4.8.1才完全支持C++11。本文提供了自动安装脚本和自动测试安装是否成功的脚本。

    操作系统是CentOS6.8的32位版本,yum自带的gcc版本为4.4.7,不支持C++11特性。所以需要升级到4.8.5,至少要升级到4.8.1才完全支持C++11。
    新系统是没有安装GCC的,而我们没有gcc4.8.5的安装包,只有源码包,地址为:http://ftp.gnu.org/gnu/gcc/
    源码包gcc4.8.5不能直接安装,所以我们需要先编译源码再安装。所以我们还是先有一个编译环境。yum提供了gcc4.4.7版本的安装包,所以我们可以先安装GCC4.4.7,这样就有了编译环境,就可以用来编译gcc4.8.5,然后再安装gcc4.8.5。
    有人可能会觉得这个麻烦,为什么不能直接安装gcc4.8.5呢?不是不可以,你得有这个版本的安装包才行呀。如果有安装包,就不需要安装gcc4.4.7,也不需要编译gcc4.8.5了,就可以直接安装gcc4.8.5。
    说一下我为什么选择4.8.5版本,因为4.8.5是4.8.x最高的版本,按理说是4.8.x版本中最好的一个版本。因为4.8.1刚完全支持C++11,后面的几个小版本肯定是小幅优化或者完善。具体做了什么优化完善,得看更新日志。
    好了,背景知识介绍完毕,下面开始安装过程。
1.获取gcc4.8.5的源码包(不同的版本,基本是只需要换掉后面的版本号即可更换下载地址)
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
2.解压压缩包
tar -jxvf gcc-4.8.5.tar.bz2
3.进入解压后的目录
cd gcc-4.8.5
4.下载、配置和安装需要的依赖库
./contrib/download_prerequisites
    这个脚本文件会自动帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

  安装gcc需要下载诸如gmp、mpfr、mpc等依赖文件,执行download_prerequisites将会自动下载这些软件并解压到当前目录(文件不大,总共只有几MB,请耐心等待下载)。
5.直接在当前目录下创建一个目录,存放编译后的文件。
mkdir gcc-build-4.8.5
6.进入这个目录来编译
cd gcc-build-4.8.5
7.生成Makefile文件,准备编译整个项目(gcc4.8.5)
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    前面的..表示会进入到上一层目录执行configure。所以gcc-build-4.8.5目录必须在gcc-4.8.5里面创建,也就是我们这样创建的。如果你想自己定义gcc-build-4.8.5目录的位置,你要处理好这里的路径问题。不建议处理,一个安装过程而已,不必折腾,就按照上述方法弄就行了。
8.编译gcc4.8.5的源码,非常耗时,时间决定于你的机器的性能。
make
   不建议使用make -j4 方式编译,很可能会失败。-j4选项是make对多核处理器的优化。虽然直接make速度慢点,只要不出错,总体上还是可以接受的。
9.安装gcc4.8.5(非root用户要在前面加sudo)
make install
10.重启系统,让gcc4.8.5生效
reboot
11.查看gcc和g++的版本
gcc --version
g++ --version
    提示为:
gcc (GCC) 4.8.5
g++ (GCC) 4.8.5
    就表示已经安装成功,并且生效了。
    特别注意,第10步很容易被忽略。如果不重启系统,查看的版本还是之前的老版本,会让你误认为安装没有成功的

 

替换系统低版本gcc

系统自带低版本gcc文件位置为/usr/bin/gcc/usr/bin/lib,此时需要将这两个部分删掉,或者后缀加上.bak,然后通过建立软连接的方式替换系统默认位置的gccc++g++文件。

mv /usr/bin/c++ /usr/bin/c++.bak
ln -s /usr/local/bin/c++ /usr/bin/c++
mv ./g++ ./g++.bak
ln -s /usr/local/bin/g++ /usr/bin/g++
mv ./gcc ./gcc.bak 
ln -s /usr/local/bin/gcc /usr/bin/gcc

替换系统gcc动态链接库

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

输出结果如下, 可以看出,gcc的动态库还是处于旧版本,说明生成的动态库没有替换旧版本gcc的动态库。

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13

查找编译gcc时生成的最新动态库。

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

列出了新版的gcc动态链接库位置。

/usr/local/lib64/libstdc++.so.6.0.18

将上面的最新动态库libstdc++.so.6.0.18复制到/usr/lib64目录下,并重新建立软连接。

cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64 
cd /usr/lib64/
rm -f ./libstdc++.so.6
ln -s libstdc++.so.6.0.18 libstdc++.so.6

再次查看gcc版本,以下结果表示动态库升级完成。

...
GLIBCXX_3.4.13 
GLIBCXX_3.4.14
GLIBCXX_3.4.15  
GLIBCXX_3.4.16  
GLIBCXX_3.4.17 
GLIBCXX_3.4.18  
GLIBCXX_3.4.19

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值