CentOS GCC 升级 6.0

  1. 获取安装包并解压
    $ wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
    $ tar -jxvf gcc-6.1.0.tar.bz2

ps : http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本供下载,建议下载.bz2的压缩包,文件更小,下载时间更少.

  1. 下载供编译需求的依赖项

    $ cd gcc-6.1.0
    $ ./contrib/download_prerequisites 
  2. 建立一个目录供编译出的文件存放

    $ mkdir gcc-build-6.1.0
    $ cd gcc-build-6.1.0
  3. 生成Makefile文件

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

  1. 编译

$ make -j4
ps :-j4选项是make对多核处理器的优化,如果不成功请使用 make,相关优化选项可以移步至参考文献[2]。
此步骤非常耗时,我虚拟机耗时近3小时; 实体机近80分钟,CPU基本是满的,内存也使用不少

  1. 安装
    $ make install

ps: 安装需要root权

  1. 查看安装

$ ls /usr/local/bin | grep gcc

  1. 重启,然后查看gcc版本
    $ gcc -v
  2. 升级gcc,生成的动态库没有替换老版本gcc的动态库
    源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.21' not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。
  • 9.1 运行以下命令检查动态库:

    $  strings /usr/lib64/libstdc++.so.6 | grep GLIBC
    // 从输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。
  • 9.2 执行以下命令,查找编译gcc时生成的最新动态库:

    $  find / -name "libstdc++.so*"
    // 将上面的最新动态库libstdc++.so.6.0.22复制到/usr/lib64目录下
    $  cd /usr/lib64
    $   cp /root/Downloads/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./
  • 9.3 删除原来软连接:
    $ rm -rf libstdc++.so.6

  • 9.4 将默认库的软连接指向最新动态库:
    $ ln -s libstdc++.so.6.0.22 libstdc++.so.6

  • 9.5 默认动态库升级完成。重新运行以下命令检查动态库:

    $  strings /usr/lib64/libstdc++.so.6 | grep GLIBC
    
    //  可以看到 输出有"GLIBCXX_3.4.21" 了
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!