先看第一行错误锁定冲突类型:conflicts with package 'clang'为文件级冲突,libllvm15版本不匹配属库版本冲突,no installation candidate为源缺失;再执行sudo apt update和sudo apt --fix-broken install自动修复,必要时用apt-mark showhold检查锁定、dpkg -S和apt-cache rdepends反查归属,多版本需求优先选/usr/lib/llvm-xx隔离安装或容器方案。

看懂第一行错误,锁定是哪种冲突
APT安装llvm时报依赖冲突,先别急着删包。终端输出的第一句往往直接说明类型:
出现conflicts with package 'clang':是文件级冲突,比如两个包都试图写/usr/bin/clang++;
提示libllvm15:amd64 (>= 1:15.0.7) but 1:14.0.6-1 is installed:属于库版本不匹配;
报错no installation candidate for llvm-15-dev或unable to locate package:其实是源缺失,不是真冲突——Ubuntu 官方源默认不带 LLVM 多版本共存支持。
先让APT自己修复,别跳过这步
多数情况根本不需要手动干预,APT 内置的解析器能自动选版本组合。执行这两条命令即可:
-
sudo apt update:确保元数据最新,尤其如果你刚加了apt.llvm.org源 -
sudo apt --fix-broken install:它会尝试拉取兼容版本(比如把llvm-14升级到llvm-15,或降级clang以匹配)
如果卡在held broken packages,运行apt-mark showhold确认是否有包被锁死——常见于手动用apt-mark hold clang防升级后忘记解锁。
查清谁在抢/lib/谁在用旧版
错误里提到具体路径或包名时,用系统命令反查归属,避免误删关键组件:
- 查
/usr/lib/llvm-14归谁管:dpkg -S /usr/lib/llvm-14 - 查
clang-14被哪些已装包依赖:apt-cache rdepends --installed clang-14(若结果含gstreamer1.0-plugins-bad或mesa,说明不能随便卸载) - 看
llvm元包实际依赖什么:apt-cache depends llvm | grep -E "(Depends|Pre-Depends)"
注意:llvm在 Ubuntu 中是虚拟包,指向当前默认版本(如llvm-15),而llvm-15又强依赖同版本clang-15和libllvm15——三者必须严格对齐。
绕不开就换隔离方案,别硬改系统
当你需要同时用llvm-14编译内核、又用llvm-17跑 Rust 工具链时,强制覆盖或卸载会破坏gcc、gnome-shell等基础组件。此时应主动隔离:
- 用
apt install llvm-17 clang-17单独装新版,保留旧版不动(Ubuntu 22.04+ 支持多版本并存,路径为/usr/lib/llvm-17) - 临时切换版本:
sudo update-alternatives --config clang,避免改$PATH出错 - 更稳妥的做法:用
podman run --rm -it ubuntu:24.04 apt update && apt install -y llvm-17 clang-17测试构建流程,不污染宿主
真正麻烦的从来不是“装不上”,而是装上后cmake仍找不到LLVMConfig.cmake——那通常是因为没装llvm-17-dev,或者find_package(LLVM)没指定COMPONENTS,这点比依赖冲突还容易被忽略。

















