clang是llvm的前端,必须依赖llvm核心库才能运行;安装clang即自动安装所需llvm组件,ubuntu用sudo apt install clang即可,centos 7需启用scl后装llvm-toolset-7-clang,windows/macos官方包已捆绑完整工具链。

Clang 是 LLVM 的前端,不是独立于 LLVM 的“另一个编译器”。装 Clang 就意味着你必须有 LLVM 的核心库(比如 libLLVM.so)和配套工具(如 llvm-link、opt),否则 clang 无法运行。但反过来,只装 LLVM 基础库不装 Clang,你就没有 C/C++ 编译能力——它本身不带语言前端。
所以结论很直接:你不需要手动“一起安装”两个东西,而是应该安装包含 Clang 的 LLVM 发行版包。具体怎么操作,取决于你的系统和使用场景。
Ubuntu/Debian 上用 apt 装,clang 自动拉取所需 LLVM 组件
执行 sudo apt install clang 就够了。apt 会自动解决依赖,把 libllvm、llvm-runtime、llvm-tools 等一并装上。你不需要额外敲 llvm 或 llvm-dev ——除非你要写 pass 或做 IR 分析。
-
clang包本身已声明对libllvm17(或对应版本)的依赖,apt 会强制满足 - 装完验证:
clang --version和llvm-config --version输出版本号应基本一致(允许小版本差,比如 clang 17.0.1 / llvm 17.0.0) - 别单独装
llvm包再试图自己配clang源码——这是多余且容易 ABI 不匹配的
CentOS/RHEL 7 上必须注意 SCL 和 toolset 版本绑定
系统默认源里的 clang 是 3.4.2,根本不能用。真正可用的是 llvm-toolset-7-clang 这类 SCL 包,它内部已经打包好对应版本的 LLVM 运行时和工具链。
Clang 22.1.3 Windows 64 位历史版本安装包,适合旧项目兼容、LLVM/Clang 工具链回退、编译行为对比、链接问题复现和 C/C++ 构建环境维护。
- 必须先启用 SCL:
sudo yum install centos-release-scl,否则yum install llvm-toolset-7-clang会失败 -
llvm-toolset-7是一个整体,里面含clang、lld、llvm-ar等,不能只挑一个装 - 启用后要用
scl enable llvm-toolset-7 -- clang --version,否则 shell 找不到新工具
Windows/macOS 上官方安装包天然捆绑,无需纠结“是否一起”
LLVM 官方 Windows 安装包(如 LLVM-18.1.6-win64.exe)和 macOS 的 Xcode 命令行工具,都是把 clang、lld、llvm-objdump 等全打在一个安装器里。你点下一步,就全有了。
- Windows 安装时勾选 “Add LLVM to the system PATH” 才能让
clang命令全局可用 - macOS 上
xcode-select --install装的是 Apple 改过的 Clang(基于 LLVM),版本可能滞后于上游,但足够日常开发 - 不要试图只下载
llvm-project源码然后只编译lib/Support——那不是“装 LLVM”,只是拿了个库
源码编译时,Clang 是 LLVM_ENABLE_PROJECTS 的子模块
如果你非得从源码编译(比如要 patch Clang 行为),那 Clang 必须作为 LLVM 的子项目启用,不能单独编译。
- cmake 配置必须加
-DLLVM_ENABLE_PROJECTS=clang,否则make根本不会生成clang可执行文件 -
clang源码放在llvm/tools/clang下,编译时和llvm共享 build 目录和CMAKE_INSTALL_PREFIX - 漏掉这个参数,你会得到一堆
libLLVM*.so,但找不到clang二进制——这不是安装失败,是配置没生效
真正容易被忽略的点是:clang 启动时动态链接的 libLLVM 必须和它编译时用的 LLVM 版本严格一致。混用不同版本的 libLLVM(比如 apt 装的 clang + 自己编译的 llvm),会导致 symbol lookup error 或段错误——这种问题不会在安装阶段报错,而是在你第一次跑 clang hello.c 时才暴露。










