温馨提示×

centos为何c++编译速度慢

小樊
41
2026-09-27 04:08:57
栏目: 编程语言

在 CentOS 上 C++ 编译速度慢,通常不是“CentOS 本身慢”,而是由编译器版本、系统配置、项目结构、硬件和使用方式共同决定的。下面按常见原因逐一说明,并给出对应优化建议。


一、编译器版本较旧(最常见原因)

现象

  • CentOS 7 默认 g++ 是 4.8.5
  • CentOS 8 默认 g++ 是 8.x

影响

  • 缺少现代优化(-O2/-O3 效率差)
  • 模板/STL 编译慢
  • 无 ccache、模块化支持差
  • 对 C++17/20 支持不完整

✅ 解决方案

# CentOS 7
yum install centos-release-scl
yum install devtoolset-11

scl enable devtoolset-11 bash
# CentOS 8 / Stream
dnf install gcc-toolset-11

二、未使用 ccache(极其重要)

问题

每次编译都从零开始,哪怕是没改的文件。

解决

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

或 CMake:

cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache .

✅ 效果:二次编译可快 5–10 倍


三、头文件过多 / 预编译头未用

问题

  • #include <iostream> 展开几千行
  • 每个 .cpp 都重新解析头文件

优化

  • 使用 PCH(预编译头)
  • 减少 #include
  • 使用 forward declaration

CMake 示例:

target_precompile_headers(myapp PRIVATE stdafx.h)

四、单线程编译(没开并行)

错误方式

make

正确方式

make -j$(nproc)

或 CMake + Ninja:

cmake -GNinja .
ninja

✅ Ninja 比 Make 快很多


五、磁盘 I/O 慢(机械盘 / 虚拟机)

表现

  • CPU 没满
  • 磁盘 100%

建议

  • 使用 SSD
  • 编译目录放 tmpfs:
mkdir /tmp/build
mount -t tmpfs tmpfs /tmp/build

六、Debug 模式 + 无优化

-O0 -g

会非常慢,尤其模板多的项目。

✅ 发布/测试用:

-O2

七、模板 / Boost / Eigen 等重头文件

  • Boost(尤其是 spirit、asio)
  • Eigen
  • 大量 template

✅ 建议:

  • 拆分编译单元
  • 使用显式实例化
  • 避免头文件里写实现

八、SELinux / 杀毒 / 审计影响

检查

getenforce

临时测试

setenforce 0

九、内存不足导致 swap

free -h

如果编译时开始用 swap:

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

十、CentOS 本身“慢”的误区

误解 实际情况
CentOS 比 Ubuntu 慢 否
服务器系统不适合编译 否
内核老就慢 编译主要看 compiler + IO

推荐“最快组合”

CentOS 8 Stream
+ gcc-toolset-12
+ ccache
+ ninja
+ make -j$(nproc)
+ SSD

如果你愿意,可以告诉我:

  • CentOS 版本
  • g++ 版本
  • 项目规模(文件数 / 是否模板多)
  • 编译命令

我可以给你针对性的优化方案。

0 踩