CentOS GCC 升级 6.0
- 获取安装包并解压
$ 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 的压缩包,文件更小,下载时间更少.
-
下载供编译需求的依赖项
$ cd gcc-6.1.0 $ ./contrib/download_prerequisites
-
建立一个目录供编译出的文件存放
$ mkdir gcc-build-6.1.0 $ cd gcc-build-6.1.0
-
生成 Makefile 文件
$ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
- 编译
$ make -j4
ps :-j4 选项是 make 对多核处理器的优化,如果不成功请使用 make,相关优化选项可以移步至参考文献 [2]。
此步骤非常耗时,我虚拟机耗时近 3 小时;实体机近 80 分钟,CPU 基本是满的,内存也使用不少
- 安装
$ make install
ps: 安装需要 root 权
- 查看安装
$ ls /usr/local/bin | grep gcc
- 重启,然后查看 gcc 版本
$ gcc -v
- 升级 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 协议》,转载必须注明作者和本文链接
推荐文章: