温馨提示×

ubuntu gcc为何卡住

小樊
36
2026-10-27 14:06:29
栏目: 智能运维

“Ubuntu 下 gcc 卡住”通常不是 gcc 本身的问题,而是环境、资源或编译目标导致的。下面按最常见原因 → 排查方法给你一个清单,你可以逐条对照。


一、最常见原因

1️⃣ 内存不足(OOM / swap 没开)

现象

  • gcc 进程 CPU 占用低
  • 终端无输出,像“死了一样”
  • dmesg 里可能有 Out of memory

排查

free -h
swapon --show
top

解决

  • 关闭其他程序
  • 开 swap:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
  • 减少并行编译:
make -j1

2️⃣ 编译巨文件 / 模板爆炸(C++ 常见)

现象

  • gcc 占用 100% CPU
  • 长时间无输出
  • 常见于模板、 Boost、 Eigen、 STL 重度使用

排查

ps aux | grep gcc

解决

  • 加编译参数减少优化:
-O0 -g
  • 拆分大文件
  • 换 clang 试试

3️⃣ 磁盘 I/O 卡死

现象

  • gcc 状态为 D(不可中断睡眠)
  • 磁盘灯常亮

排查

iostat -x 1
dmesg | tail

解决

  • 换 SSD
  • 不要在 NFS / 网络盘编译
  • 清理 /tmp

4️⃣ 死循环宏 / 预处理卡死

现象

  • gcc -E 也卡
  • 单文件就卡

解决

gcc -E main.c | head

检查宏是否递归展开。


5️⃣ 网络依赖(configure / cmake)

现象

  • 卡在 checking...
  • 实际不是 gcc,而是构建系统

解决

strace -f gcc ...

看卡在哪个系统调用。


6️⃣ WSL / 虚拟机问题

  • WSL1 文件系统慢
  • 虚拟机没开硬件加速

建议

  • WSL2
  • 用 Ubuntu 原生或 Docker

二、快速定位命令(强烈推荐)

# 看 gcc 在干嘛
strace -f gcc test.c

# 看资源
top
htop
iotop

# 看是不是 OOM
dmesg | grep -i kill

三、如果你愿意,我可以更精准帮你

你可以补充:

  1. Ubuntu 版本(lsb_release -a)
  2. gcc 版本(gcc --version)
  3. 卡在 哪一步(configure / make / gcc 本身)
  4. 是 C 还是 C++
  5. 是不是大项目 / 模板代码

我可以直接给你针对性解决方案。

0 踩