【原创】今天升级下Centos 6.5下古老的GCC4.4.7 --> GCC 4.8.5

blogdaren 2022-05-07 抢沙发 339人次

问题背景:

有台机器装的是上古时期的CentOS 6.5,系统古老,自然自带的GCC也就很古老,版本为4.4.7,而升级的动机是为了使用上GCC的C11特性,严格来讲,只有GCC 4.8+以上的版本才支持C11,所以决定升级到GCC 4.8.5,也尝试升级过更高版本,发现失败了,而编译成本实在是太高了,所以最终放弃了更高版本的编译,选择实战可成功编译的4.8.5版本;另外只编译对C和C++语言的支持。

注意事项:

1、编译过程十分漫长,本人至少耗用1个多小时,所以要耐心等待,同时记得编译时使用: make -j  核数

2、如果升级了GCC的版本,切记一定要同步升级GDB的版本否则继续使用原版GDB调试可能会工作异常。

下载源码:

https://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz

遇到的坑:

坑1:GCC 4.8.5版本依赖三个包:gmp-4.3.2.tar.bz2、isl-0.8.1.tar.bz2、mpfr-2.4.2.tar.bz2,注意:这三个包无需手动下载,因为源码包自带了一个shell脚本,直接执行这个脚本就会自动帮咱下载好,而且下载好之后就是上述三个压缩包,既不要解压,更不要安装,保持原样扔那就行了,至于是哪个脚本,别着急,往后看完整步骤有说明【纳闷儿的是为何官方给了脚本而不直接集成起来】。

坑2:这年代都是64位系统了,所以使用参数 --disable-multilib 关掉32位库支持,否则会报告如下错误

configure: error: I suspect your system does not have 32-bit developement libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.

先切换到源码根目录:

cd /path/to/your/gcc-4.8.5

下载上述三个依赖包:

sh ./contrib/download_prerequisites

开始执行配置指令:

./configure --prefix=/usr/local/gcc48 --disable-multilib --enable-languages=c,c++

开始编译并安装:

make -j 4 && make install

备份旧版本GCC:

mv /usr/bin/gcc  /usr/bin/gcc44
mv /usr/bin/g++  /usr/bin/g++44
mv /usr/bin/c++  /usr/bin/c++44

软链旧版本的libstdc++库到新版本库:

可能会遇到报错: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found,原因就是因为旧库libstdc++不支持当前提示的GLIBC_3.4.15版本,可以使用命令: strings  /usr/lib64/libstdc++.so.6 | grep -i glibc 查看所有支持的GLIBC版本,所以解决方案就是用编译好的新版本库替换旧版本库即可:

ln -sfv /usr/local/gcc48/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6

版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:【原创】今天升级下Centos 6.5下古老的GCC4.4.7 --> GCC 4.8.5

Free Web Hosting