需添加 LLVM 官方 APT 源并安装带版本后缀的包(如 clang-17、llvm-17-dev),再用 update-alternatives 设置默认版本;Ubuntu 自带 llvm 元包仅固定绑定发行版默认版本(如 22.04 为 LLVM 15),不随上游更新。

用 apt 安装指定主版本(如 15、16、17)的 LLVM
Ubuntu 官方源只提供一个固定版本(比如 22.04 默认是 LLVM 15),要装其他主版本,必须加官方 LLVM APT 仓库。关键不是“能不能装”,而是“加对源 + 装对包名”。
- 先确认你的 Ubuntu 版本代号:
lsb_release -sc(如bionic对应 18.04,focal对应 20.04,jammy对应 22.04) - 编辑
/etc/apt/sources.list,追加对应版本的 LLVM 源,例如 Ubuntu 22.04(jammy)装 LLVM 17:deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main - 导入 GPG key:
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -(注意:Ubuntu 22.04+ 已弃用apt-key,更安全做法是:sudo mkdir -p /etc/apt/trusted.gpg.d && sudo wget -O /etc/apt/trusted.gpg.d/llvm-snapshot.gpg https://apt.llvm.org/llvm-snapshot.gpg.key) - 更新并安装具体组件:
sudo apt update && sudo apt install clang-17 llvm-17-dev libclang-17-dev—— 注意包名带版本后缀,不带后缀的clang或llvm是元包,行为不可控
装完后怎么让 clang 命令指向指定版本
APT 安装的带版本号的二进制(如 clang-17)默认放在 /usr/bin/,但不会自动覆盖无后缀的 clang。你得手动设置优先级或改 PATH。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 推荐用
update-alternatives管理多版本:sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 17 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-17 - 然后选择默认版本:
sudo update-alternatives --config clang,交互式选 17 - 验证:
clang --version应输出类似Ubuntu clang version 17.0.6 - 别直接改
~/.bashrc的PATH加/usr/lib/llvm-17/bin—— 这个路径下没可执行文件,APT 包把二进制全放到了/usr/bin/,不是/usr/lib/llvm-X/bin
为什么 apt install llvm 不等于装了最新版
llvm 这个包名在 Ubuntu 中是“元包”(metapackage),它只依赖当前发行版认为“稳定”的那个 LLVM 主版本(比如 22.04 是 15),且不随上游更新。你运行 apt install llvm,实际装的是 llvm-15,哪怕你已加了 LLVM 17 的源。
- 查它到底装了啥:
apt depends llvm | grep llvm- - 真正想用 LLVM 17 的工具链(
llc、opt、llvm-config),必须显式安装带后缀的包:llvm-17、llvm-17-dev、llvm-17-tools -
llvm-config同样有版本后缀:llvm-config-17,CMake 里要用它找库:find_package(LLVM 17 REQUIRED CONFIG)
手动解压预编译包 vs apt 安装:选哪个
如果你只是开发用,不需要系统级集成(比如不写内核模块、不给他人打包),APT 方式足够;但若需要 C++20 模块、libc++、clangd 和编译器完全同版本,手动解压更可控。
- APT 安装的
clang-17默认链接系统libstdc++,不带libc++;手动包(如clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04.tar.xz)自带完整libc++和clangd,路径干净(解压即用) - APT 安装会写入系统包管理数据库,卸载干净;手动包需自己维护路径和
PATH,但不会干扰apt依赖关系 - 容易被忽略的一点:
clang++-17默认不启用 C++20 模块支持,必须加-fmodules且配合-fprebuilt-module-path才能用 —— 这和是否手动安装无关,是 Clang 本身限制

















