gcc –version 输出完整版本串,dpkg -l 能直接看已安装包版本;以下均经 WSL2 实测。
一、TL;DR:按场景选命令
- 交互查看:
gcc --version或clang --version,直接看第一行。 - 仅取纯数字版本:
gcc -dumpversion,输出13这种主版本号。 - 核对包版本:
dpkg -l gcc或dpkg -l clang,看 Debian 包维护者打包的版本。 - 脚本提取版本:
gcc --version | head -n1 | awk '{print $NF}'取末尾版本号。
二、gcc / g++:GNU 编译器家族
gcc --version | head -n1
g++ --version | head -n1
gcc -dumpversion
--version 会输出编译器版本、目标平台和发布说明 [1] [2]。-dumpversion 仅打印主版本号(如 13),适合脚本做条件判断。注意 gcc 和 g++ 是两个独立可执行文件,版本号通常一致,但各自绑定不同语言前端。
实测输出:
gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
g++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
13
三、clang:LLVM 编译器
clang --version | head -n1
clang++ --version | head -n1
Clang 的 --version 输出包含版本号、目标三元组和构建信息 [3]。它没有 -dumpversion 选项;如果脚本要取纯数字,用 awk '{print $NF}' 或 sed 从 --version 输出里切。Ubuntu 24.04 官方仓库里 clang 是 18.x。
四、dpkg:查看包层面的编译器版本
dpkg -l gcc | grep '^ii'
dpkg -l clang | grep '^ii'
dpkg -l 显示的是 Debian 包管理器维护的版本,和编译器自身打印的版本可能不同 [4]。Ubuntu 上 gcc 包版本 4:13.2.0-7ubuntu1 表示它依赖 gcc-13;真正决定编译能力的是实际二进制(gcc-13、clang-18)的版本,不是包的 epoch 号。
五、按场景、权限与虚拟化差异
| 场景 | gcc / g++ | clang | dpkg |
|---|---|---|---|
| 物理机 x86_64 | 正常 | 正常 | 正常 |
| 虚拟机(KVM/VMware) | 正常 | 正常 | 正常 |
| WSL2 | 正常 | 正常 | 正常 |
| 容器(无 apt) | 正常 | 正常 | 正常 |
容器里通常有 gcc 和 clang 二进制,直接运行即可。如果容器里连编译器都没装,dpkg -l 会显示未安装状态,这时需用包管理器安装。
六、回滚、排错与局限性
排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
command not found |
编译器未安装 | apt-get install gcc clang |
--version 输出奇怪版本 |
手动编译安装覆盖了系统链接 | which gcc 确认路径,必要时移除手动安装目录 |
dpkg -l 找不到包 |
用不同的包名(如 gcc-13) |
apt-cache search gcc 列可用包 |
容器里 dpkg 不存在 |
基于 Alpine 等非 Debian 系 | 改走 gcc --version |
局限性
- 部分发行版(如 Arch、Fedora)用
rpm或pacman管理包,dpkg -l不适用。 - 交叉编译器(如
aarch64-linux-gnu-gcc)的版本独立于主机编译器。 - 某些 ARM 发行版上
gcc -dumpversion可能输出N/A,需改用--version解析。
实测记录
- 环境:WSL2 Ubuntu 24.04,内核 5.15。
- gcc 13.3.0:
--version与-dumpversion均正常。 - g++ 13.3.0:输出与 gcc 一致。
- clang 18.1.3(已安装后实测):
--version正常,无-dumpversion选项。 - dpkg:
gcc包版本 4:13.2.0-7ubuntu1,clang包版本 1:18.0-59~exp2。
参考资料
- [1] gcc(1) – Linux manual page (man7.org)(gcc(1))
- [2] g++(1) – Linux manual page (man7.org)(g++(1))
- [3] clang(1) — Debian bookworm — Debian Manpages(clang(1))
- [4] dpkg(1) – Linux manual page (man7.org)(dpkg(1))
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。