
前置依赖Ubuntu/Debiansudoaptupdatesudoaptinstall-ygitcmake ninja-build python3\gcc g binutils-dev libzstd-dev\zlib1g-dev libxml2-dev libedit-dev libncurses5-dev1. 获取源码MonorepoLLVM 现在使用单仓库monorepoclang、libc、libcabi、libunwind都在里面gitclone--depth1https://github.com/llvm/llvm-project.gitcdllvm-project目录结构llvm-project/ ├── llvm/ # LLVM 核心 ├── clang/ # Clang 前端 ├── libcxx/ # libc 标准库 ├── libcxxabi/ # libcabi 运行时 ├── libunwind/ # 栈展开库 ├── lld/ # 链接器 └── ...2. 关键 CMake 配置在llvm-project根目录下执行cmake-Sllvm-Bbuild-GNinja\-DLLVM_ENABLE_PROJECTSclang;lld\-DLLVM_ENABLE_RUNTIMESlibcxx;libcxxabi;libunwind\-DLLVM_TARGETS_TO_BUILDNative\-DCMAKE_BUILD_TYPERelease\-DCMAKE_INSTALL_PREFIX/usr/local/llvm\-DLLVM_ENABLE_LIBCXXON\-DLLVM_STATIC_LINK_CXX_STDLIBOFF\-DCLANG_DEFAULT_CXX_STDLIBlibc\-DLLVM_INSTALL_UTILSON\-DLLVM_ENABLE_TERMINFOOFF关键选项解释选项作用LLVM_ENABLE_PROJECTSclang;lld同时编译clang和lld链接器LLVM_ENABLE_RUNTIMESlibcxx;libcxxabi;libunwind把libc、libcabi、libunwind作为运行时一并构建LLVM_ENABLE_LIBCXXON让LLVM 自身在编译时也链接libc而不是libstdcLLVM_STATIC_LINK_CXX_STDLIBOFF动态链接 libc生成.so文件设为ON则静态链接CLANG_DEFAULT_CXX_STDLIBlibc让编译出的clang默认使用libc无需每次加-stdliblibcLLVM_TARGETS_TO_BUILDNative只编译本机架构加快编译速度如需交叉编译可改为X86;AArch64;ARM等CMAKE_INSTALL_PREFIX/usr/local/llvm安装路径避免覆盖系统默认编译器3. 编译与安装# 编译根据 CPU 核心数调整 -jninja-Cbuild -j$(nproc)# 安装到 /usr/local/llvmsudoninja-Cbuildinstall注意编译 LLVM 非常耗时Release 模式下可能需要 30 分钟到数小时建议至少预留 20GB 磁盘空间。4. 验证与使用检查编译出的 libc.sols/usr/local/llvm/lib/libc*# 应看到 libc.so.1、libcabi.so.1、libunwind.so.1 等使用新编译的 clang默认已链接 libcexportPATH/usr/local/llvm/bin:$PATH# 直接编译无需 -stdliblibc因为设置了 CLANG_DEFAULT_CXX_STDLIBclang hello.cpp-ohello# 验证动态依赖ldd hello|grepc# 应显示 libc.so.1而不是 libstdc.so.6如果未设置CLANG_DEFAULT_CXX_STDLIBclang-stdliblibc hello.cpp-ohello5. 完整生产级配置参考如果你需要更完整的配置如包含compiler-rt、bolt等cmake-Sllvm-Bbuild-GNinja\-DLLVM_ENABLE_PROJECTSclang;clang-tools-extra;lld;lldb\-DLLVM_ENABLE_RUNTIMEScompiler-rt;libcxx;libcxxabi;libunwind\-DLLVM_TARGETS_TO_BUILDX86;AArch64;ARM;RISCV\-DCMAKE_BUILD_TYPERelease\-DCMAKE_INSTALL_PREFIX/usr/local/llvm\-DLLVM_ENABLE_LIBCXXON\-DLLVM_STATIC_LINK_CXX_STDLIBOFF\-DCLANG_DEFAULT_CXX_STDLIBlibc\-DCLANG_DEFAULT_LINKERlld\-DLLVM_INSTALL_UTILSON\-DLLVM_ENABLE_TERMINFOOFF\-DLLVM_ENABLE_LIBXML2OFF\-DLLVM_ENABLE_ZLIBON\-DLLVM_USE_LINKERlld常见问题Q: 编译时提示找不到 libc 头文件A: 确保LLVM_ENABLE_RUNTIMES包含了libcxx;libcxxabi且源码目录下确实有libcxx/和libcxxabi/文件夹monorepo 默认包含。Q: 编译出的 clang 还是链接了 libstdcA: 检查LLVM_ENABLE_LIBCXXON是否生效并确认安装后使用/usr/local/llvm/bin/clang而非系统默认的/usr/bin/clang。Q: 如何完全自举bootstrapA: 先用系统 GCC 完成上述编译Stage 1然后用 Stage 1 的clang作为CMAKE_C_COMPILER/CMAKE_CXX_COMPILER再编译一次并确保加上-stdliblibc。