linux中安装c++编译器本质是安装g++,但必须连带安装gcc、glibc-devel、binutils等依赖组件,否则编译会失败;不同发行版需用对应命令:rhel系执行dnf install -y gcc-c++,debian系执行apt install -y g++,装完须验证g++ --version及编译测试,离线环境应先在同版本联网机下载依赖包再本地安装。

Linux 中安装 C++ 编译器,本质就是装 g++;但只装 g++ 很可能编译失败——它依赖 gcc、glibc-devel、binutils 等底层组件,所以必须用包管理器一次性装全。
确认系统类型再选命令
不同发行版的包管理器和仓库名不同,硬套命令会报 No package g++ available 或 Unable to locate package g++:
- CentOS/RHEL/AlmaLinux/Rocky Linux(含 openEuler)用
yum或dnf:yum install -y gcc-c++(旧版)或dnf install -y gcc-c++(新版) - Ubuntu/Debian/Deepin 用
apt:apt update && apt install -y g++ - Fedora 默认用
dnf,但某些旧镜像需先dnf groupinstall "Development Tools"补全工具链
别直接 yum install g++——RHEL 系发行版中没有独立的 g++ 包,只有 gcc-c++;而 Debian 系才真有 g++ 这个包名。
验证安装是否真正可用
装完只跑 g++ --version 不够。常见“已安装但不能用”场景:
-
g++: error trying to exec 'cc1plus': execvp: No such file or directory:说明gcc本体没装,gcc-c++依赖它但未自动拉取(某些最小化安装镜像会这样),补装gcc:yum install -y gcc或apt install -y gcc - 编译
std::thread报 undefined reference:缺libpthread,CentOS 需装glibc-devel,Ubuntu 需libc6-dev - 用
-std=c++17报错:默认gcc版本太低(如 CentOS 7 自带 4.8.5 不支持),得升级或手动编译高版本gcc
区分 gcc 和 g++ 的实际行为
别以为 gcc hello.cpp 和 g++ hello.cpp 效果一样——它们链接阶段差异直接影响运行:
-
gcc hello.cpp:按 C 语言规则处理,不自动链接libstdc++,遇到std::cout直接报 undefined reference -
g++ hello.cpp:自动启用 C++ 模式,预定义__cplusplus宏,并隐式加-lstdc++,无需手写链接参数 - 混用风险:
gcc main.cpp utils.o中若utils.o是用g++编的,链接时可能符号解析失败——C++ 的 name mangling 导致函数名被修饰过
结论:C++ 项目统一用 g++ 编译和链接,哪怕源文件是 .c 后缀;C 项目用 gcc,避免意外引入 C++ 运行时。
离线环境怎么装
不能联网时,yum install 或 apt install 失效,但别急着去 GNU 官网下源码编译——太重。更可行的是:
- 在同版本联网机器上用
yumdownloader --resolve gcc-c++(CentOS)或apt download --download-only g++(Ubuntu)批量下载所有依赖 rpm/deb 包 - 把下载的包拷到目标机,用
yum localinstall *.rpm或dpkg -i *.deb安装 - 注意顺序:先装
gcc、glibc-devel、binutils,再装gcc-c++;dpkg若提示依赖未满足,用apt --fix-broken install补齐(Ubuntu 离线需提前下好对应 deb)
真正容易被忽略的点是:离线安装后,/usr/lib64/libstdc++.so.6 可能仍指向旧版(比如指向 libstdc++.so.6.0.19),而新 g++ 编译出的二进制需要 .so.6.0.25+。得检查 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 是否含所需版本号,否则要手动替换或更新 libstdc++。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











