在 CentOS 系统中,尤其是长期支持版本如 CentOS 7,其默认的软件源提供的 GCC 版本可能相对陈旧,许多现代软件项目或特定的开发环境要求使用更新版本的编译器,GCC 5.x 系列,GCC 5 引入了对 C++11/C++14 更好的支持和性能优化,在 CentOS 上安装 GCC 5 成为一个常见的需求,本文将详细介绍两种主流的安装方法:使用软件集(SCL)和从源码编译,并分析其优劣,帮助您根据自身需求选择最合适的方案。
推荐方法:使用软件集 (SCL)
对于绝大多数用户而言,使用软件集是在 CentOS 上安装和管理多个软件版本(包括 GCC)的最佳实践,SCL 的核心优势在于其非侵入性,它允许您在不覆盖系统默认工具链的前提下,安装并使用新版本的软件,从而保证系统的稳定性和安全性,对于 CentOS 7,GCC 5.3 版本包含在 devtoolset-4
中。
安装 SCL 仓库
您需要确保系统已安装 centos-release-scl
,这个软件包提供了访问 CentOS SCL 仓库所需的配置文件。
sudo yum install -y centos-release-scl
执行此命令后,Yum 的仓库配置中将新增 SCL 相关的源,接下来就可以安装所需的开发工具集了。
安装 Devtoolset-4
Devtoolset 是 Red Hat 和 CentOS 为开发者提供的一套工具链,devtoolset-4
对应的就是 GCC 5.3,安装这个工具集会一并安装 GCC 5 及其相关的开发工具,如 g++
、gdb
等。
sudo yum install -y devtoolset-4-toolchain
这个过程会自动解决并下载所有依赖项,安装过程相对快速。
启用 GCC 5 环境
仅仅安装 devtoolset-4
并不会使其成为系统的默认编译器,您需要手动启用它所提供的环境,启用操作会在当前的 Shell 会话中临时修改 PATH
、LD_LIBRARY_PATH
等环境变量,使得 gcc
命令指向新安装的 GCC 5。
scl enable devtoolset-4 bash
执行上述命令后,您会进入一个新的 Bash Shell,在这个 Shell 中,您可以验证 GCC 的版本。
验证安装
在新启用的 Shell 中,运行以下命令来检查 GCC 版本:
gcc --version
如果输出信息中包含 gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
或类似的版本号,则表明安装和启用均已成功。
永久启用(可选)
如果您希望每次登录时都自动使用 GCC 5,可以将启用命令添加到 Shell 的配置文件中,~/.bashrc
。
echo "source scl_source enable devtoolset-4" >> ~/.bashrc
添加后,重新加载配置文件或退出并重新登录即可生效。
替代方法:从源码编译安装
从源码编译提供了最大的灵活性,您可以自定义安装路径、编译选项以及支持的语言,这个过程耗时更长、步骤更复杂,且需要解决更多的依赖问题,仅推荐在无法使用 SCL 或需要高度定制化编译器的高级用户场景下使用。
安装编译依赖
编译 GCC 本身需要一个可用的 C 和 C++ 编译器(通常是系统自带的旧版本 GCC),以及一系列开发库。
sudo yum groupinstall -y "Development Tools" sudo yum install -y gmp-devel mpfr-devel libmpc-devel wget
下载并解压 GCC 5 源码
从 GNU 官方 FTP 站点下载 GCC 5 的稳定源码包,gcc-5.5.0。
wget https://ftp.gnu.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz tar -xzf gcc-5.5.0.tar.gz cd gcc-5.5.0
下载必备依赖
GCC 源码目录提供了一个便利脚本,可以自动下载编译所需的 GMP、MPFR 和 MPC 等依赖库。
./contrib/download_prerequisites
配置编译选项
为了不与系统默认的 GCC 冲突,建议将其安装到独立的目录,/usr/local/gcc5
。
mkdir build && cd build ../configure --prefix=/usr/local/gcc5 --enable-languages=c,c++ --disable-multilib
--prefix
: 指定安装目录。--enable-languages
: 指定需要支持的语言,这里只安装 C 和 C++ 以节省时间。--disable-multilib
: 对于 64 位系统,禁用多库支持可以简化编译过程。
编译与安装
这是最耗时的步骤,根据机器性能,可能需要几十分钟到数小时。
make -j$(nproc) sudo make install
-j$(nproc)
选项会利用所有可用的 CPU 核心进行并行编译,显著加快速度。
配置环境变量
安装完成后,需要将新编译的 GCC 5 的 bin
目录添加到系统的 PATH
中。
echo 'export PATH=/usr/local/gcc5/bin:$PATH' >> ~/.bashrc source ~/.bashrc
随后,使用 gcc --version
即可验证版本。
两种方法对比
特性 | 软件集 (SCL) | 源码编译 |
---|---|---|
易用性 | 简单快捷,命令清晰 | 复杂繁琐,步骤多 |
安装时间 | 较快,下载预编译包 | 漫长,需从零开始编译 |
系统影响 | 极低,非侵入式 | 较高,依赖系统编译器 |
灵活性 | 有限,使用预设版本 | 极高,可完全自定义 |
维护管理 | 方便,可通过 Yum 更新 | 困难,需手动重新编译 |
相关问答FAQs
安装了多个GCC版本后,如何知道当前正在使用的是哪一个?
解答: 您可以通过两个关键命令来确定当前使用的 GCC 版本和路径,使用 which gcc
命令,它会显示当前 PATH
环境变量中找到的第一个 gcc
可执行文件的完整路径,如果启用了 devtoolset-4
,它可能会指向 /opt/rh/devtoolset-4/root/usr/bin/gcc
,使用 gcc --version
命令,它会直接输出该编译器的详细版本信息,结合这两条命令的输出,您就可以准确地知道当前生效的是哪个 GCC 版本。
为什么不建议直接用 yum install gcc
来安装或者升级系统默认的 GCC?
解答: 直接使用 yum
更新或安装系统默认仓库中的 GCC 存在很大风险,CentOS(以及其他基于 Red Hat 的发行版)的核心系统组件,如 glibc
(C 标准库)、内核模块以及许多系统服务,都是在特定版本的 GCC 编译器下构建和测试的,贸然将系统默认的 GCC 版本升级到一个不兼容的主版本(例如从 4.x 升级到 5.x),可能会导致这些核心组件无法正常工作,从而引发系统不稳定、应用程序崩溃,甚至在最坏的情况下导致系统无法启动,SCL 方法的精髓就在于它通过隔离环境变量,为特定任务提供新版本工具,同时丝毫不影响系统底层的默认工具链,确保了系统的整体稳定性。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复