Linux系统手动升级gcc

我们有些应用在编译中需要高版本的gcc和g++,但是linux系统每个版本一般都对应一个gcc版本,要想升级只能手动升级。

常规安装

1、下载gcc源码
这里以5.2版本为例,下载地址http://ftp.gnu.org/gnu/gcc
2、将下载的gcc源码解压到/usr/local文件夹

$ tar -jxf gcc-5.2.0.tar.bz2 -C /usr/local/
$ cd /usr/local/gcc-5.2.0
$ ./contrib/download_prerequisites

安装gcc需要先安装gmp、isl、mpc、mpfr,以上命令会自动下载这些安装包,在编译gcc时一起编译安装。
3、安装

$ mkdir build && cd build
$ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
$ make -j4
$ make install

这个过程比较耗时,跟计算机的配置有关,快的话40分钟或一个小时,慢的话三四个小时。

离线安装

对于有些需要安装在内网服务器,不能联网的机器,只能采用离线安装,离线安装同样按照以上方法下载gcc源码和解压,只是gmp、isl、mpc、mpfr这些包需要提前下载好。有两种方法可以进行:
1、手动下载安装包并创建软连接

  • 查看依赖包的版本
$ vim ./contrib/download_prerequisites

在以上文件中查看需要下载的依赖包的版本,这里我们需要下载 gmp-4.3.2.tar.bz2、isl-0.15.tar.bz2、mpc-0.8.1.tar.gz、mpfr-2.4.2.tar.bz2,注意,依赖包一定要是指定版本的,否则会出问题。下载好依赖包,直接解压到/usr/local/gcc-6.1.0/ 目录,然后设置软链接。

  • 设置软连接
# ln -sf gmp-4.3.2 gmp
# ln -sf isl-0.15 isl
# ln -sf mpc-0.8.1 mpc
# ln -sf mpfr-2.4.2 mpfr
  • 编译安装
$ mkdir build && cd build
$ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
$ make -j4
$ make install

2、找一个能联网的linux机器,自动下载安装包
如果有其他可以上网的linux机器,可以在这台机器上按照“常规安装”的前两步联网自动下载安装包,自动创建软连接。然后将gcc-5.2.0文件夹整体打包到离线服务器,直接进行第三步编译安装。

更新glibcxx

安装完gcc,通过gcc -v查看发现gcc版本已经更新,但是运行某些程序还是会出现类似“/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found”的错误,这是因为安装gcc不会自动更新libstdc++共享库,这里需要手动替换一下。
1、查看动态库的版本

$ 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
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

2、搜索安装gcc时新版本的动态库的位置

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

按照以上方法安装生成的动态库一般位于/usr/local/lib64,我们将其移动到/usr/lib64文件夹并替换软连接就可以了

# cp /usr/local/lib64/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

至此动态库配置完成,运行strings命令重新检查动态库版本:

# 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
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值