Linux环境下安装C++编译器 升级GCC版本到最新版的方法【教程】

梦瑶酱_8314

梦瑶酱_8314

2026-04-13

738人浏览

原创

c++oding="utf-8" ?>

不推荐直接装最新版gcc,应优先使用发行版官方升级路径:centos/rhel用devtoolset,ubuntu/debian用update-alternatives,源码编译仅作兜底并须解决依赖、构建目录和动态库路径三大问题。

linux环境下安装c++编译器 升级gcc版本到最新版的方法【教程】

直接装最新版 GCC 不推荐——它不兼容旧系统默认库,编译完的二进制可能在其他机器上跑不起来,而且容易卡在依赖或 configure 阶段。真正实用的做法是:用发行版官方支持的升级路径优先,源码编译只作为兜底选项。

CentOS/RHEL 用 devtoolset 切换版本最稳

CentOS 7/8 默认 gcc 是 4.8.5,很多 C++14/17 项目根本过不了。SCL(Software Collections)提供的 devtoolset 是红帽官方维护的多版本共存方案,不用动系统默认编译器,也不会污染 /usr/bin

  • yum install centos-release-scl(CentOS 7)或 dnf install centos-linux-release-scl(CentOS 8+)
  • 查可用版本:yum --disablerepo="*" --enablerepo="centos-sclo-rh" list available | grep devtoolset
  • devtoolset-12(GCC 12.2):yum install devtoolset-12-gcc devtoolset-12-gcc-c++
  • 临时启用:scl enable devtoolset-12 bash,之后 gcc -v 就会显示 12.2
  • 永久生效?别直接改 /etc/profile。把 scl enable devtoolset-12 bash 加到 ~/.bashrc 末尾,再 source ~/.bashrc 即可

注意:devtoolset-13 和更新的版本目前没进 CentOS 官方 SCL 源,RHEL 9+ 才原生支持 GCC 13+,CentOS 用户得切到源码编译。

Ubuntu/Debian 用 update-alternatives 管理多版本

Ubuntu 20.04+ 自带 gcc-11,但要上 gcc-13gcc-14 得加 PPA。直接软链接替换 /usr/bin/gcc 是危险操作,update-alternatives 才是正解。

Linux Journey
Linux Journey

当用户想学习Linux基础、命令行、文件系统等时,在LabEx查找并推荐免费的Linux Journey课程。

下载
  • 加源:sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt update
  • 装多个版本:sudo apt install gcc-13 g++-13 gcc-11 g++-11
  • 注册进 alternatives:sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 100 --slave /usr/bin/g++ g++ /usr/bin/g++-13
  • 再注册老版本(权重调低):sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 40 --slave /usr/bin/g++ g++ /usr/bin/g++-11
  • 交互式切换:sudo update-alternatives --config gcc,选编号即可

关键点:权重值(如 10040)决定自动模式下的默认选择,数值越大越优先。别漏掉 --slave 参数,否则 g++ 不会同步切换。

源码编译 GCC 的三个硬门槛

gcc.gnu.org 下源码自己编译,自由度高但极易失败。90% 的报错都卡在这三步:

  • 依赖没下全:不能只装系统级的 gmp-devel 等包。必须进源码目录运行 ./contrib/download_prerequisites,它会自动下载并解压匹配版本的 gmpmpfrmpcisl 到源码树里,再建软链。跳过这步,configure 会报 error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+
  • configure 路径写错:绝对不要在源码目录直接 ./configure。必须新建独立构建目录:mkdir build && cd build && ../configure --prefix=$HOME/local/gcc-14.2 --enable-languages=c,c++ --disable-multilib。否则 make clean 都清不干净
  • libstdc++.so.6 不更新:编译完 make install,新 libstdc++.so.6.0.xx$HOME/local/gcc-14.2/lib64/,但系统仍用旧的 /usr/lib64/libstdc++.so.6。运行新编译的程序时可能报 GLIBCXX_3.4.30 not found。解决方法是加 export LD_LIBRARY_PATH=$HOME/local/gcc-14.2/lib64:$LD_LIBRARY_PATH~/.bashrc

验证和踩坑要点

装完别急着编译项目,先做三件事:

  • 运行 gcc -v,确认输出里有你装的版本号,且 Target 行显示 x86_64-linux-gnu(不是 x86_64-pc-linux-gnu),后者说明没走对 configure 路径
  • 写个最小 C++17 程序(比如用 std::optional),用 g++ -std=c++17 test.cpp -o test 编译,再 ./test 运行,看是否真能跑通
  • 检查 g++ --print-search-dirs 输出里的 libraries: 路径,确保它包含你新装的 lib64 目录,否则链接阶段会默默回退到旧库

最容易被忽略的是动态库路径和 LD_LIBRARY_PATH 的持久化——它只在当前 shell 生效,新开终端就失效。别指望 make install 自动帮你修系统级链接,那是发行版包管理器的事,自己编译的就得自己管 runtime 环境。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2240

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

229

24

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

869

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

2300

5

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3590

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3133

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2173

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5190

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

4862

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

CLion 远程开发实战
CLion 远程开发实战

共0课时 | 0人学习