安全安装多个clang版本需路径隔离与update-alternatives或环境变量控制:系统仓库版(如clang-14/17)自动装至/usr/bin/clang-x;非仓库版用llvm.sh脚本安装;通过--install注册带--slave关联clang++;项目级优先用cmake参数或cc/cxx环境变量指定路径,避免全局切换风险。

直接装多个版本没问题,但别让它们互相覆盖或默认混用——关键在安装路径隔离 + update-alternatives 或环境变量控制。
怎么安全地安装多个 Clang 版本(Ubuntu/Debian)
系统仓库提供的版本最省心,比如 clang-14、clang-17 会自动装到独立路径:/usr/bin/clang-14、/usr/bin/clang-17,互不干扰。如果需要仓库里没有的版本(比如 clang-18.1),用官方脚本更可靠:
- 下载并执行
llvm.sh:wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && sudo ./llvm.sh 18 - 它会自动添加源、更新并安装
clang-18、clang++-18等二进制文件到/usr/bin/下带后缀的路径 - 切勿手动
make install到/usr/bin—— 容易覆盖或权限错乱
为什么 clang --version 还是旧版本?
因为 clang 这个无后缀命令只是个符号链接,默认指向系统最早装的那个(常是 clang-10 或 clang-12),不是你新装的。它和 clang-17 是两个独立可执行文件,不改链接或替代配置,调用不到新版本。
Clang 22.1.3 Windows 64 位历史版本安装包,适合旧项目兼容、LLVM/Clang 工具链回退、编译行为对比、链接问题复现和 C/C++ 构建环境维护。
-
update-alternatives --display clang通常返回 “no alternatives” —— 说明还没注册过 - 必须显式注册才能参与切换:
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 100 - 要连带管
clang++,得用--slave:sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 100 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-17 - 优先级数字(如
100)只用于auto模式自动选最高者;手动切换时它不影响
如何在项目中指定某个 Clang 版本(不改系统默认)
全局切换有风险,尤其当你同时维护多个项目时。更稳妥的是按需指定,CMake 和 Make 都支持:
- CMake:运行时加参数
-DCMAKE_C_COMPILER=/usr/bin/clang-17 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-17 - Make:设置环境变量再编译
CC=clang-17 CXX=clang++-17 make - Clion 等 IDE 可在项目设置里单独填
clang-17路径,不影响终端或其他项目 - 注意:某些项目(如 ClickHouse)硬编码检查
clang --version输出,这时仍需确保该命令指向目标版本
容易被忽略的兼容性坑
装完多个版本不代表能直接用,尤其是涉及标准库、链接器和头文件路径时:
-
clang-17默认可能找不到libstdc++的新版头,报错类似error: 'vector' file not found—— 需确认g++对应版本已安装(如g++-13),Clang 会复用其头文件 - 混合使用不同版本的 Clang 和 LLD/Lldb 一般没问题,但调试信息(DWARF 版本)或链接时符号可见性可能有细微差异
- 如果你用
cc-switch这类第三方工具,它本质也是封装了update-alternatives或 PATH 注入,但要注意它是否识别你手动装在/opt/clang-18.1这样的非标路径下的版本










