CentOS升级gcc4.4.7到gcc4.8.5

本文介绍如何将CentOS 6.7系统中的GCC从4.4.7升级到4.8.5,以支持C++11标准。包括下载安装包、配置编译环境、编译安装及动态库更新等步骤。

2017-04-08,对第6步进行更新,加上了   # yum groupinstall "Development Tools"

--------------------------------------------

最近想要升级gcc,因为CentOS6.7默认自带的编译器是gcc 4.4.7,但是不支持c++11,所以我想升级到gcc 4.8.5,这样就可以完全支持c++11了。gcc官网上面说从gcc 4.8.1开始就完整支持g++11了[1]。升级的过程,主要参考了网上的资料[2]。


【gcc升级步骤】

1.下载gcc 4.8.5的压缩包

下载地址:http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2


2.找个目录存放,并解压 

#tar -jxvf gcc-4.8.5.tar.bz2


3.进入目录,执行命令

这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

# cd  gcc-4.8.5 
# ./contrib/download_prerequisites


4.建立一个目录供编译出的文件存放

# mkdir gcc-build-4.8.5
# cd gcc-build-4.8.5


5.生成Makefile文件
# ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

6.执行make,此处耗时大约1小时。不建议使用文献[2]提到的 make -j4,可能报错

# yum groupinstall "Development Tools"

# make


7.执行安装

# make install


8.完成后,测试

# reboot//请先重启,切记!

# gcc -v

# g++ -v


【库升级】

别以为gcc升级成功了,就可以直接编程c++11的程序了。还需要进行库升级。源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似:


/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found


的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。[3]


1.检查

strings /usr/lib64/libstdc++.so.6 | grep GLIBC


2.找到 gcc 4.8.5 最新的库文件

# find / -name "libstdc++.so*"


/usr/lib64/libstdc++.so.6.0.13
/usr/lib64/libstdc++.so.6
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
/usr/lib/vmware-tools/lib64/libstdc++.so.6
/usr/lib/vmware-tools/lib64/libstdc++.so.6/libstdc++.so.6
/usr/lib/vmware-tools/lib32/libstdc++.so.6
/usr/lib/vmware-tools/lib32/libstdc++.so.6/libstdc++.so.6
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyo
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.py
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyc
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyo
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.py
/usr/local/lib64/libstdc++.so.6.0.19
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so
/usr/local/lib64/libstdc++.so.6.0.19-gdb.py
/opt/gcc-4.8.5/gcc-build-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/opt/gcc-4.8.5/gcc-build-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/opt/gcc-4.8.5/gcc-build-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/opt/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/opt/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/opt/gcc-4.8.5/gcc-build-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/opt/gcc-4.8.5/gcc-build-4.8.5/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/opt/gcc-4.8.5/gcc-build-4.8.5/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/opt/gcc-4.8.5/gcc-build-4.8.5/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so



上面粗体加黑的libstdc++.so.6.0.19,就是目前4.8.5的新的库文件了。


3.复制这个库文件到指定目录,并修改软连接

# cp /opt/gcc-4.8.5/gcc-build-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19  /usr/lib64

# cd /usr/lib64

# rm libstdc++.so.6

# ln -s libstdc++.so.6.0.19 libstdc++.so.6


4.检查一遍

# strings /usr/lib64/libstdc++.so.6 | grep GLIBC


GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19

...


(完成)




参考文献:

[1] https://gcc.gnu.org/projects/cxx-status.html#cxx11

[2] http://www.linuxidc.com/Linux/2015-01/112595.htm

[3] http://blog.chinaunix.net/uid-14735472-id-5546498.html

<think>好的,用户想在RHEL6.4上安装GCC 4.8.5,同时保留原有的4.4.7版本。首先,我需要确认RHEL6.4的默认GCC版本确实是4.4.7,这符合用户的情况。接下来,用户需要同时保留旧版本,这可能是因为某些应用程序依赖旧版GCC,所以不能直接覆盖安装。 首先,用户可能需要添加额外的软件源,比如EPEL或者SCL,因为默认的yum源可能没有GCC 4.8.5。不过,我记得GCC的较新版本可能需要手动编译,或者是否有现成的RPM包可用。需要检查是否可以通过SCL(Software Collections)来安装,但RHEL6可能支持SCL,不过需要确认。 如果SCL可用,安装devtoolset-3可能会提供GCC 4.9,但用户需要的是4.8.5,可能需要更早的devtoolset版本,比如devtoolset-2。需要查证devtoolset对应的GCC版本。例如,devtoolset-3对应GCC 4.9,devtoolset-2对应4.8。不过,RHEL6的SCL支持可能需要先安装scl-utils,然后启用相应的软件集合。 如果通过SCL安装,用户可以使用scl enable来临时切换环境,这样不会影响系统默认的GCC版本。这可能是一个比较安全的方法,不需要手动编译,也容易管理。 如果SCL中没有合适的版本,可能需要手动下载GCC 4.8.5的源码进行编译安装。编译GCC需要先安装依赖项,比如gmp、mpfr、mpc等。用户需要确保这些依赖已经安装,并且版本符合要求。编译过程可能会比较耗时,而且需要足够的磁盘空间。 在编译安装时,需要指定安装路径,比如/opt/gcc-4.8.5,这样不会覆盖系统默认的/usr/bin下的GCC。之后,用户可以通过在.bashrc中添加PATH环境变量或者使用update-alternatives来管理不同版本的GCC。 另外,需要注意在安装过程中可能会遇到的依赖问题,比如旧版本的库是否满足新GCC的要求。可能需要更新某些开发工具链,或者解决库文件的冲突。 总结下来,有两种主要方法:使用SCL安装或手动编译。优先推荐SCL方式,因为更简单且易于管理。如果不行,再考虑手动编译。需要详细写出这两种方法的步骤,并提醒用户注意依赖和环境变量的配置,以确保新旧版本共存,不影响系统原有功能。</think>在RHEL 6.4系统中安装GCC 4.8.5并保留原有4.4.7版本,可通过以下步骤实现: --- ### 一、准备工作 1. **备份系统** ```bash sudo tar -czvf /backup/gcc_backup.tar.gz /usr/bin/gcc* /usr/lib/gcc ``` 2. **安装基础依赖** ```bash sudo yum install -y wget make gcc-c++ glibc-static glibc-devel ``` --- ### 二、通过SCL安装(推荐) > 利用Software Collections库实现多版本共存 1. **启用SCL仓库** ```bash sudo yum install -y centos-release-scl ``` 2. **安装devtoolset-2(含GCC 4.8)** ```bash sudo yum install -y devtoolset-2-gcc devtoolset-2-gcc-c++ ``` 3. **临时启用GCC 4.8** ```bash scl enable devtoolset-2 bash ``` 4. **验证版本** ```bash gcc --version # 应显示4.8.2(RHEL SCL的4.8子版本) ``` --- ### 三、手动编译安装(备选) > 需约2GB磁盘空间,编译时间约1小时 1. **下载源码包** ```bash wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz tar -zxvf gcc-4.8.5.tar.gz ``` 2. **安装依赖库** ```bash cd gcc-4.8.5 ./contrib/download_prerequisites ``` 3. **配置编译参数** ```bash mkdir build && cd build ../configure --prefix=/opt/gcc-4.8.5 --enable-languages=c,c++ --disable-multilib ``` 4. **编译并安装** ```bash make -j$(nproc) && sudo make install ``` --- ### 四、多版本管理 1. **设置环境变量** ```bash echo 'export PATH=/opt/gcc-4.8.5/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` 2. **通过`alternatives`管理** ```bash sudo update-alternatives --install /usr/bin/gcc gcc /opt/gcc-4.8.5/bin/gcc 40 sudo update-alternatives --config gcc # 交互式选择版本 ``` --- ### 五、验证共存状态 ```bash # 查看默认版本 gcc --version # 应为4.8.5 # 查看原始版本 /usr/bin/gcc --version # 应保持4.4.7 ``` --- ### 关键注意事项 1. 使用SCL方式时,每次新会话需执行`scl enable devtoolset-2 bash` 2. 手动安装后,需确保程序链接到正确的库路径 3. 不建议删除旧版GCC,避免破坏yum依赖关系 两种方案均可实现版本共存,优先推荐SCL方案(维护成本低),若需长期固定使用4.8.5,建议采用手动安装+环境变量配置方案。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值