直接用 apt 装是最稳妥的,除非明确需要官方源外版本(如 llvm 18 或带调试符号的自定义构建),否则应避免源码编译——它耗内存、耗时间、易因 ld signal 9、cmake 版本、gcc c++11 支持或 gold 链接器缺失而失败。

直接用 apt 装是最稳妥的,除非你明确需要某个不在 Ubuntu 官方源里的版本(比如 LLVM 18 或带调试符号的自定义构建),否则别碰源码编译——它吃内存、耗时间、容易卡在 ld terminated with signal 9,还常因 cmake 版本、gcc C++11 支持、gold 链接器缺失等问题失败。
Ubuntu 默认源里装 llvm + clang(最快最稳)
Ubuntu 22.04(Jammy)及以上默认源已提供 LLVM 14–15,够日常开发和学习用:
sudo apt update && sudo apt install clang llvm- 装完即用:
clang --version会显示类似clang version 14.0.0-1ubuntu1 - 二进制路径在
/usr/bin/clang和/usr/bin/llvm-config,无需额外配置 PATH - 头文件、库、工具链(
llvm-ar、llvm-objdump等)全都在标准位置,CMake 自动识别
需要新版(如 LLVM 17/18)?用官方 APT 源
LLVM 官方维护了针对各 Ubuntu 版本的 apt.llvm.org 源,比 PPA 更可靠、更新更快:
Clang 22.1.3 Windows 64 位历史版本安装包,适合旧项目兼容、LLVM/Clang 工具链回退、编译行为对比、链接问题复现和 C/C++ 构建环境维护。
- 先加 GPG 密钥:
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc - 添加源(以 Ubuntu 22.04 + LLVM 17 为例):
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" | sudo tee /etc/apt/sources.list.d/llvm.list sudo apt update && sudo apt install clang-17 llvm-17-dev- 设为默认(可选):
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 100,再sudo update-alternatives --config clang
注意:不要同时启用多个 llvm-toolchain-xx 源,否则 apt upgrade 可能冲突;llvm-17-dev 包含头文件和静态库,写 Pass 或链接 LLVM IR 必须装。
必须从源码编译?避开三个高频坑
常见失败不是因为命令写错,而是环境没对齐:
-
内存不足:
make -j编译时ld常因 OOM 被 kill(signal 9)。虚拟机务必配 ≥10GB 内存 + 8GB swap,或改用gold链接器:sudo ln -sf /usr/bin/ld.gold /usr/bin/ld -
Clang 版本循环依赖:编译 LLVM 3.4–10 时,若系统只有
gcc,configure会默认调g++,但旧版 LLVM 需要 Clang 自身才能正确编译。解决方法是先sudo apt install clang,再用CC=clang CXX=clang++ ./configure ... -
目录结构错乱:GitHub 上的
llvm-project是单仓库多子项目,clang不在llvm/tools/下。正确做法是用-DLLVM_ENABLE_PROJECTS=clang(CMake)或--enable-project=clang(configure),而不是手动cp -r—— 否则make会找不到clang的 CMakeLists.txt
源码编译真正难的不是“怎么跑通”,而是“怎么让后续开发不踩二次坑”:比如你编译了带 --enable-debug-symbols 的 LLVM,但忘了把 /usr/lib/debug 或自定义 lib/ 加进 LD_LIBRARY_PATH,后面跑 opt 或写 Pass 就会报 undefined symbol —— 这类细节不记录,两周后重装环境又得重踩一遍。










