CentOS 上 GCC 编译很慢通常不是单一原因,而是系统配置、软件版本、编译参数、硬件资源等多个因素叠加。下面按最常见 → 少见但容易被忽略给你系统梳理。
CentOS 默认仓库里的 GCC 版本非常保守:
| CentOS 版本 | 默认 GCC |
|---|---|
| CentOS 7 | 4.8.5 |
| CentOS 8 | 8.x |
| CentOS Stream 9 | 11+ |
问题
✅ 解决
# CentOS 7
yum install centos-release-scl
yum install devtoolset-11
scl enable devtoolset-11 bash
很多人直接:
make
✅ 正确做法
make -j$(nproc)
否则:
常见不合理的参数:
-O3 -g -ftest-coverage -fprofile-arcs
影响
-O3:大量优化(慢)-g:生成调试信息(可接受)✅ 建议
-O0 -g
-O2
表现:
top 看到 swap✅ 检查:
free -h
✅ 解决方案:
make -j4
/tmp 在慢盘✅ 检查:
iostat -x 1
✅ 优化:
mkdir /dev/shm/build
cd /dev/shm/build
cmake ...
常见于:
stat/open✅ 检查:
getenforce
✅ 临时验证(不要长期关):
setenforce 0
表现:
make 都重新编译make 在“空转”✅ 检查:
date
stat 源文件
常见于:
make + 网络文件系统(NFS)例如:
✅ 优化:
include如果你在编译:
✅ 可选方案:
yum install clang
clang++ main.cpp
| 现象 | 可能原因 |
|---|---|
| make 只跑一个核 | 没加 -j |
| 编译到一半卡 | 内存不足 |
| 第一次快第二次慢 | swap / IO |
| CentOS 7 特别慢 | GCC 4.8 |
| Debug 很慢 | -O3 / coverage |
| 磁盘 100% | /tmp 在慢盘 |
# 使用新 GCC
scl enable devtoolset-11 bash
# 并行编译
make -j$(nproc)
# Release 构建
cmake -DCMAKE_BUILD_TYPE=Release ..
你可以直接贴出:
make / cmake 命令我可以直接告诉你该改哪一条,而不是泛泛而谈。