centos6.10升级gcc到4.8.5

yum支持的最高版本只到4.4.7 不支持:C++11

1
2
3
4
5
[root@centos888 modsecurity-v3.0.3]# rpm -qa | grep gcc
gcc-4.4.7-23.el6.x86_64
gcc-c++-4.4.7-23.el6.x86_64
libgcc-4.4.7-23.el6.x86_64
[root@centos888 modsecurity-v3.0.3]#

手工升级到4.8.5

1、下载包:

1
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2

2、解压:

1
[root@centos888 ~]# tar -xvf gcc-4.8.5.tar.bz2

3、运行gcc自带的脚本,会自动下载安装一些依赖

1
2
[root@centos888 ~]# cd gcc-4.8.5
[root@centos888 gcc-4.8.5]# ./contrib/download_prerequisites

4、创建一个存放编译后文件的目录

1
2
[root@centos888 gcc-4.8.5]# mkdir gcc-build-4.8.5
[root@centos888 gcc-4.8.5]# cd gcc-build-4.8.5/

5、开始编译:

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

注意,语句开头是两个点,上层目录的意思

6、安装,过程有点久

1
[root@centos888 gcc-build-4.8.5]# make && make install

7、重启机器:

1
[root@centos888 ~]# reboot

8、查看版本:

1
2
3
4
5
6
7
8
9
10
11
[root@centos888 ~]# gcc --version
gcc (GCC) 4.8.5
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@centos888 ~]# g++ --version
g++ (GCC) 4.8.5
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@centos888 ~]#

9、此时生成的动态库没有替换旧版本gcc的动态库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@centos888 ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
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
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
[root@centos888 ~]#

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@centos888 ~]# find / -name "libstdc++.so*" | grep usr
/usr/local/lib64/libstdc++.so.6.0.19-gdb.py
/usr/local/lib64/libstdc++.so.6.0.19 #这个
/usr/local/lib64/libstdc++.so
/usr/local/lib64/libstdc++.so.6
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyo
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyc
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyo
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.py
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyc
/usr/lib64/libstdc++.so.6.0.13
/usr/lib64/libstdc++.so.6
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so
[root@centos888 ~]#

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

1
2
3
4
5
6
7
[root@centos888 ~]# cp /usr/local/lib64/libstdc++.so.6.0.19 /usr/lib64/
[root@centos888 ~]# cd /usr/lib64/
[root@centos888 lib64]# ll libstdc++.so.6
lrwxrwxrwx. 1 root root 19 72 01:32 libstdc++.so.6 -> libstdc++.so.6.0.13
[root@centos888 lib64]# rm -f libstdc++.so.6
[root@centos888 lib64]# ln -s libstdc++.so.6.0.19 libstdc++.so.6
[root@centos888 lib64]#

12、再次查看gcc版本

1
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
# linux
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×