Linux系统手动升级gcc

来源:互联网 发布:乐高ev3编程软件安卓版 编辑:程序博客网 时间:2024/04/30 01:28

我们有些应用在编译中需要高版本的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 GLIBCGLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBCXX_FORCE_NEWGLIBCXX_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 GLIBCGLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBCXX_3.4.14GLIBCXX_3.4.15GLIBCXX_3.4.16GLIBCXX_3.4.17GLIBCXX_3.4.18GLIBCXX_3.4.19GLIBCXX_3.4.20GLIBCXX_3.4.21GLIBC_2.3GLIBC_2.2.5GLIBC_2.3.2GLIBCXX_FORCE_NEWGLIBCXX_DEBUG_MESSAGE_LENGTH
0 0
原创粉丝点击