首页 > Sysadmin > 正文

Linux 查看编译器版本:4 条命令验证

huyuanwen 2026-11-02 Sysadmin

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。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。