温馨提示×

centos gcc编译慢怎么办

小樊
39
2026-08-29 10:55:33
栏目: 智能运维

CentOS 上遇到 gcc 编译慢,通常不是单一原因,可以按下面几个方向逐项排查和优化。


一、确认是否是“真的慢”

先区分:

  • 编译本身慢(gcc 吃满 CPU)
  • make / CMake 没并行
  • I/O 慢(磁盘、NFS)
  • 系统资源不足

查看方式:

top
htop
iostat -x 1

二、启用并行编译(最常见)

1️⃣ make 并行

make -j$(nproc)

例如:

make -j8

⚠️ 不要 make -j 不加参数,容易内存爆炸。


2️⃣ CMake 项目

cmake --build . -- -j$(nproc)

或:

cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)

三、减少编译内容

1️⃣ 只编译当前架构

-march=native
gcc -march=native -O2

2️⃣ 避免 -O3(有时反而慢)

  • -O2 通常比 -O3 编译更快
  • -O3 会增加优化时间

3️⃣ 关闭无用功能

如果是大型项目:

./configure --disable-xxx

四、升级 GCC(CentOS 默认很老)

CentOS 7 默认 gcc 4.8(非常慢)

gcc --version

安装新版本(推荐)

yum install centos-release-scl
yum install devtoolset-11
scl enable devtoolset-11 bash

或:

gcc 11 / 12 / 13

⚠️ 新 gcc 编译速度 明显更快


五、使用预编译头(PCH)

✅ 适合 C++ 大型项目

#include "stdafx.h"

CMake 示例:

target_precompile_headers(myapp PRIVATE stdafx.h)

六、减少头文件依赖(最重要)

常见原因

  • 一个头文件改动 → 全量重编译
  • 头文件层层 include

✅ 优化建议:

  • 使用前向声明
  • 减少 #include
  • 把不变的内容拆分到单独头文件

七、使用 ccache(强烈推荐)

缓存编译结果,二次编译极快

yum install ccache

使用方式:

export CC="ccache gcc"
export CXX="ccache g++"

或直接:

ccache gcc main.c

查看命中率:

ccache -s

八、使用 distcc(多台机器编译)

适合服务器集群:

yum install distcc

九、磁盘 & 系统问题排查

1️⃣ 不要用 NFS 编译

NFS 编译速度会 非常慢

2️⃣ 使用 tmpfs(小项目)

mkdir /tmp/build
mount -t tmpfs tmpfs /tmp/build

十、内存 & swap 问题

查看内存

free -h

如果频繁 swap

  • 增加内存
  • 减少 -j 数量

十一、推荐“最快组合”(实战)

CentOS 7/8 实战方案

devtoolset-11
ccache
make -j$(nproc)
-O2

十二、如果还慢,我可以帮你具体分析

你可以告诉我:

  1. CentOS 版本
  2. gcc 版本
  3. 项目类型(C / C++ / CMake / Makefile)
  4. 单文件还是大型工程
  5. CPU / 内存

我可以直接给你 最优编译参数和 Makefile 配置

0