Centos 6.5升级gcc : 源码安装 + rpm安装

时间:2023-12-28 09:50:32

1. 前言

采用Centos 6.5默认的gcc版本为4.4.7,不支持c++ 11,需要升级;

首先想到用yum命令:执行yum update gcc-c++或yum update g++ 显示没有可用更新;

于是只能手动下载更新gcc。

2. 源码安装

rpm安装请见(4.参考资料)

@ 下载最新版本gcc:http://gcc.gnu.org/

@ 准备好以下三个库,否则./configure将出现以下错误提示:

Centos 6.5升级gcc : 源码安装 + rpm安装

这三个库可以使用gcc下自带的脚本安装:./contrib/download_prerequisites (手动安装的下载地址:GMPMPFR, MPC

@ 进入gcc的目录下,并执行configure,成功将生成Makefile文件;

# ./configure --prefix=/usr/local/gcc-5.4.0 --disable-multilib

--prefix:指定gcc的安装目录,若不指定gcc将默认安装在/usr/local;

--disable-multilib:由于我使用的是64位系统,不加的话讲出现如下错误提示 -

Centos 6.5升级gcc : 源码安装 + rpm安装

@ 编译:# make  安装:# make install

执行安装命令将编译好的文件拷贝到目标安装文件夹中,至此安装告一段落;

3. 配置

1) gcc 5.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在安装目录下分别存放,如命令文件放在bin目录下、库文件在 lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。

@ 方法一:将gcc的安装目录/bin放在PATH中;

@ 方法二:使用符号连接的方式,这样做可以仍然使用系统上的旧版本的gcc编译器 -

(1)查看原来的gcc所在的路径:

# which gcc 显示:/usr/bin/gcc, 因此,原来的gcc命令在/usr/bin目录下,将原来的gcc和g++文件更名为gcc447,g++447;

(2)将gcc 5.4.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

# cd /usr/bin

# ln -s gcc安装目录/bin/gcc gcc

# ln -s gcc安装目录/bin/g++ g++

这样,就可以分别使用gcc、g++来调用GCC 5.4.0的gcc、g++完成对C、C++程序的编译了。同时,仍然能够通过gcc447,g++447使用旧版本的GCC编译器。

2)源码编译升级安装了gcc后,编译程序或运行其他程序时,有时会出现类似“/usr/lib64/libstdc++.so.6:version 'GLIBCXX_*' not found的问题:

Centos 6.5升级gcc : 源码安装 + rpm安装

这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,需要将gcc最新版本的动态库替换系统中老版本的动态库;

@ 解决方法

(1)首先检查动态库

Centos 6.5升级gcc : 源码安装 + rpm安装

=》gcc的动态库依然为旧版本;

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

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

Centos 6.5升级gcc : 源码安装 + rpm安装

(3)将上述最新动态库libstdc++.so.6.0.21复制到/usr/lib64目录下;修改系统默认动态库的指向即可:

# cd /usr/lib64

# rm -rf libstdc++.so.6

# ln -s libstdc++.so.6.0.21 libstdc++.so.6

4. 参考资料

为你详解Linux安装GCC方法 (附rpm安装方法)

Linux升级安装gcc:/usr/lib/libstdc++.so.6:version GLIBCXX_* not found