如何在 CentOS 上编译安装最新版 GCC

GNU 编译器套装(GNU Compiler Collection,GCC)是由 GNU 项目(GNU Project)出品的一款优化编译器。该套装包含了 C、C++、Objective-C、Fortran、Ada、Go、以及 D 的前端和软件库(如 libstdc++ 等)。

在 CenOS 上可以通过 yumdnf 命令很方便地安装 GCC,但是版本可能较低,某些情况下无法满足需求,因此我们需要自行编译安装特定版本的 GCC 以满足我们在某些情况下的特定需求。

GCC 官方文档提供了较为详细的安装指南,如果你想要了解配置和构建 GCC 的细节,可参考其文档中的”Installing GCC“(安装 GCC)部分。本文以 GCC 最新版本 14.2.0 为例,带你快速了解在 CentOS 上构建 GCC 的流程,以及如何让多个版本共存。本文提供的安装步骤已在 CentOS 7、以及 CentOS Stream 8/9 中测试。

遵循“最小权限原则”(Principle of least privilege)是一种最佳实践,因此本文假设你登录的是不具备管理员账户(root)权限普通账户。文中出现的命令大部分不会用到 root 权限,仅会在有必要时在相关命令前添加 sudo 命令调用 root 权限。

本文在用到包管理器时,会统一使用 yum 命令,但是要知道在 CenOS 8、CentOS Stream 8 及更新版本的 CentOS 中,yum 命令已被 dnf 命令替代(以符号链接的形式存在),运行 yum 命令实际上是运行 dnf 命令。

一、准备工作

构建 GCC 需要多种工具和软件包。具体可参考“Prerequisites for GCC”(GCC 先决条件)。对于 CentOS 来说,需要确保安装了相关的工具及软件库依赖。你可以运行以下命令以确保它们的安装:

sudo yum install -y gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel glibc-devel.i686 libgcc.i686

如果你用的是 CentOS 7,运行以上命令可能会出错,这是因为官方已经停止支持系统版本,官方镜像源地址已不可用。如果有条件,OSFERE 建议尽早迁移到新版本系统。如果你暂时不考虑更换系统版本,则需要手动更改可用的镜像源地址。运行以下命令可切换到官方归档的镜像源地址,然后再重新运行上面的命令即可。

sudo sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo
sudo yum clean all
sudo yum makecache

由于 GCC 自身是由 C 语言编写的,因此你需要一个 C 语言编译器来构建它,通常可以用旧版本的 GCC 编译高版本的 GCC。因此,需要通过 CentOS 中的 yum 命令安装一个旧版本的 GCC。

另外,这里有意安装了 glibc-devel.i686libgcc.i686 这两个软件库依赖,目的是为了让构建的 GCC 能够编译 32 位程序。如果你不需要编译 32 位程序推荐不安装,但是要在配置 GCC 构建时需要使用选项 --disable-multilib 禁用对多目标架构软件库(用于支持不同的目标架构变体、调用约定等)的构建。

准备工作完成后,就可以开始开始构建 GCC 的具体步骤了。

二、获取源码

GCC 提供了两种源代码获取方式,一种是从 GNU 官方站点及其镜像站点直接下载源代码压缩包,另一种是通过 GNU 提供的 Git 仓库克隆源代码。你可以根据自己喜好选择不同的方式。为方便介绍,本文示例采用的是第一种方式。

要通过 GNU 官方或镜像站点下载 GCC 源代码,可访问下列网址:

本文示例通过官方站点下载。可以运行以下命令直接将 GCC 源代码压缩包下载到本地(你可以自行选择合适的位置,如果没有偏好,放在 /usr/local/src 是个不错的选择):

curl -O https://ftp.gnu.org/gnu/gcc/gcc-14.2.0/gcc-14.2.0.tar.gz

下载到的压缩包文件名应为 gcc-14.2.0.tar.gz(文件名中的版本号是你所选择的版本)。运行以下命令将下载后压缩包文件解压缩,得到文件夹 gcc-14.2.0 备用:

tar -xvf gcc-14.2.0.tar.gz

如果你想要通过 Git 仓库下载 GCC 源代码,可以运行以下命令:

git clone git://gcc.gnu.org/git/gcc.git gcc

如果你想使用特定版本,可以进入 gcc 目录,通过命令 git tag --list 查看 GCC 所有版本,并用命令 git checkout tagname 将源码切换到你想要的版本(注意将这里的 tagname 换成实际的标签名)。当然,你也可以通过切换分支来切换版本,具体可参考官方相关文档的相关说明。

此外 GCC 还提供了其他下载方式,如 FTP 和 Rsync,如果有需要可访问“GNU Mirror List”(GNU 镜像列表)页面获取。注意,此页面中提供的站点或镜像站点包含 GNU 项目的全部软件资源,你需要在其中的 gcc 文件夹中获取 GCC 源代码。

三、配置定制

在开始构建 GCC 之前,你可以根据自己的需要对待构建的 GCC 源代码进行配置。GCC 提供了丰富的配置选项,具体可查阅“Installing GCC: Configuration”(安装 GCC:配置)。在本文示例中,由于没有特殊需要,仅使用了其中一个选项,这会在下面的步骤中提及。

尽管你可以直接在源代码所在目录中构建 GCC,但是官方文档强烈建议在独立于源代码所在目录的目录中构建。比如你想要在名为 objdir 的文件夹中构建 GCC,那么该文件夹应和源代码夹在同一层级:

.
├── gcc-14.2.0
└── objdir

也就是说,你不应直接在源代码目录中构建,也不应该在源代码中创建子文件夹并在该文件夹中构建。

当前你应在 GCC 源代码文件夹 gcc-14.2.0 所在的目录下。逐一运行以下命令(先创建名为 objdir 的文件夹,再将工作目录切换到该文件夹,最后运行 configure 脚本执行配置):

mkdir objdir
cd objdir
../configure --prefix=/usr/local/gcc

这里使用了一个配置选项,即 --prefix,用来指定所构建 GCC 的安装的路径,本文示例的安装路径为 /usr/local/gcc,你也可以根据自己的需要选择合适的路径。

如前所述,如果你没有安装 glibc-devel.i686libgcc.i686 这两个软件库依赖,运行以上命令会报错,如果你想要兼容 32 位程序,则参考前文所述安装该依赖再运行上面的命令。否则,需要在为命令添加如下所示的选项才能成功运行。

../configure --prefix=/usr/local/gcc --disable-multilib

四、开始构建

配置完成后就可以开始正式构建 GCC 了。运行以下命令开始构建。

make -j2

注意,构建 GCC 需要较多内存和磁盘空间,资源不足可能导致构建失败。若使用云服务器,建议临时升级配置以满足需求。

构建时间的长短取决于你所用机器的性能。如果你使用的机器性能强劲,可适当加大选项 -j 的值增加任务的并行数量以加快构建速度。

如果有需要,你可以对已构建的 GCC 进行测试,这需要安装相关工具,具体可参考官方文档中的“Installing GCC: Testing”。本文示例忽略了测试步骤,直接运行以下命令进行安装:

sudo make install

构建并安装成功后,GCC 会存放在目录 /usr/local/gcc 中。

五、切换版本

现在你的系统中的 GCC 存在两个版本,一个是为了构建新版本 GCC 通过 yum 命令安装的旧版本 GCC,另一个是刚刚构建好的新版本 GCC。

如果你只需要偶尔使用新版本 GCC,可以在使用前在 Shell 中运行下列命令临时修改相关的系统环境变量,以便在通过源代码构建其他程序时能够正确调用新安装的 GCC:

export CC=/usr/local/gcc/bin/gcc
export CXX=/usr/local/gcc/bin/g++
export LD_LIBRARY_PATH="/usr/local/gcc/lib64:$LD_LIBRARY_PATH"
export PATH="/usr/local/gcc/bin:$PATH"

如果新版本 GCC 需要成为你的主力编译器,可以编辑 Bash 的配置文件 .bashrc.bash_profile 文件,将上面这些命令添加进去。

以 .bash_profile 为例,使用你喜欢的编辑器(这里使用的是 vi 编辑器)将其打开:

vi ~/.bashrc

将光标移动到内容末尾(.bashrc 通常在注释 #User specific aliases and functions 后面一行,.bash_proxy 通常在注释 #User specific environment and startup programs 后面一行),然后将之前的那些命令输入或复制粘贴到该文件中,保存退出(vi 编辑器先按 ESC 再输入 :wq 并回车)。

最后运行以下命令使其生效即可正常使用 GCC:

source ~/.bash_profile

六、升级版本

如果想要升级到 GCC 今后发布的新版本,只需按照以上步骤重新操作一遍即可。

评论

《 “如何在 CentOS 上编译安装最新版 GCC” 》 有 2 条评论

  1. cc

    谢谢大佬分享,顺便证书过期了

    1. 谢谢提醒,已更新。

回复 OSFERE 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注