【原创】今天升级下Centos 6.5下古老的GCC4.4.7 --> GCC 4.8.5
问题背景:
有台机器装的是上古时期的CentOS 6.5,系统古老,自然自带的GCC也就很古老,版本为4.4.7,而升级的动机是为了使用上GCC的C11特性,严格来讲,只有GCC 4.8+以上的版本才支持C11,所以决定升级到GCC 4.8.5,也尝试升级过更高版本,发现失败了,而编译成本实在是太高了,所以最终放弃了更高版本的编译,选择实战可成功编译的4.8.5版本;另外只编译对C和C++语言的支持。
温馨提示:
编译过程十分漫长,本人至少耗用1个多小时,所以要耐心等待,同时记得编译时使用: make -j 核数。
下载源码:
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 )原创,转载请保留文章出处。