news 2026/6/25 18:00:19

编译 llvm 的 libc++

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
编译 llvm 的 libc++

前置依赖(Ubuntu/Debian)

sudoaptupdatesudoaptinstall-ygitcmake ninja-build python3\gcc g++ binutils-dev libzstd-dev\zlib1g-dev libxml2-dev libedit-dev libncurses5-dev

1. 获取源码(Monorepo)

LLVM 现在使用单仓库(monorepo),clanglibc++libc++abilibunwind都在里面:

gitclone--depth1https://github.com/llvm/llvm-project.gitcdllvm-project

目录结构:

llvm-project/ ├── llvm/ # LLVM 核心 ├── clang/ # Clang 前端 ├── libcxx/ # libc++ 标准库 ├── libcxxabi/ # libc++abi 运行时 ├── libunwind/ # 栈展开库 ├── lld/ # 链接器 └── ...

2. 关键 CMake 配置

llvm-project根目录下执行:

cmake-Sllvm-Bbuild-GNinja\-DLLVM_ENABLE_PROJECTS="clang;lld"\-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"\-DLLVM_TARGETS_TO_BUILD="Native"\-DCMAKE_BUILD_TYPE=Release\-DCMAKE_INSTALL_PREFIX=/usr/local/llvm\-DLLVM_ENABLE_LIBCXX=ON\-DLLVM_STATIC_LINK_CXX_STDLIB=OFF\-DCLANG_DEFAULT_CXX_STDLIB=libc++\-DLLVM_INSTALL_UTILS=ON\-DLLVM_ENABLE_TERMINFO=OFF
关键选项解释
选项作用
LLVM_ENABLE_PROJECTS="clang;lld"同时编译clanglld链接器
LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"libc++、libc++abi、libunwind作为运行时一并构建
LLVM_ENABLE_LIBCXX=ONLLVM 自身在编译时也链接libc++而不是libstdc++
LLVM_STATIC_LINK_CXX_STDLIB=OFF动态链接 libc++(生成.so文件);设为ON则静态链接
CLANG_DEFAULT_CXX_STDLIB=libc++让编译出的clang++默认使用libc++,无需每次加-stdlib=libc++
LLVM_TARGETS_TO_BUILD="Native"只编译本机架构,加快编译速度;如需交叉编译可改为"X86;AArch64;ARM"
CMAKE_INSTALL_PREFIX=/usr/local/llvm安装路径,避免覆盖系统默认编译器

3. 编译与安装

# 编译(根据 CPU 核心数调整 -j)ninja-Cbuild -j$(nproc)# 安装到 /usr/local/llvmsudoninja-Cbuildinstall

注意:编译 LLVM 非常耗时,Release 模式下可能需要 30 分钟到数小时,建议至少预留 20GB 磁盘空间。


4. 验证与使用

检查编译出的 libc++.so
ls/usr/local/llvm/lib/libc++*# 应看到 libc++.so.1、libc++abi.so.1、libunwind.so.1 等
使用新编译的 clang++(默认已链接 libc++)
exportPATH=/usr/local/llvm/bin:$PATH# 直接编译,无需 -stdlib=libc++(因为设置了 CLANG_DEFAULT_CXX_STDLIB)clang++ hello.cpp-ohello# 验证动态依赖ldd hello|grepc++# 应显示 libc++.so.1,而不是 libstdc++.so.6
如果未设置CLANG_DEFAULT_CXX_STDLIB
clang++-stdlib=libc++ hello.cpp-ohello

5. 完整生产级配置(参考)

如果你需要更完整的配置(如包含compiler-rtbolt等):

cmake-Sllvm-Bbuild-GNinja\-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb"\-DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind"\-DLLVM_TARGETS_TO_BUILD="X86;AArch64;ARM;RISCV"\-DCMAKE_BUILD_TYPE=Release\-DCMAKE_INSTALL_PREFIX=/usr/local/llvm\-DLLVM_ENABLE_LIBCXX=ON\-DLLVM_STATIC_LINK_CXX_STDLIB=OFF\-DCLANG_DEFAULT_CXX_STDLIB=libc++\-DCLANG_DEFAULT_LINKER=lld\-DLLVM_INSTALL_UTILS=ON\-DLLVM_ENABLE_TERMINFO=OFF\-DLLVM_ENABLE_LIBXML2=OFF\-DLLVM_ENABLE_ZLIB=ON\-DLLVM_USE_LINKER=lld

常见问题

Q: 编译时提示找不到 libc++ 头文件?
A: 确保LLVM_ENABLE_RUNTIMES包含了libcxx;libcxxabi,且源码目录下确实有libcxx/libcxxabi/文件夹(monorepo 默认包含)。

Q: 编译出的 clang 还是链接了 libstdc++?
A: 检查LLVM_ENABLE_LIBCXX=ON是否生效,并确认安装后使用/usr/local/llvm/bin/clang++,而非系统默认的/usr/bin/clang++

Q: 如何完全自举(bootstrap)?
A: 先用系统 GCC 完成上述编译(Stage 1),然后用 Stage 1 的clang++作为CMAKE_C_COMPILER/CMAKE_CXX_COMPILER再编译一次,并确保加上-stdlib=libc++

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 17:59:00

FanControl完全配置指南:5分钟掌握Windows风扇控制终极方案

FanControl完全配置指南:5分钟掌握Windows风扇控制终极方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…

作者头像 李华
网站建设 2026/6/25 17:58:39

Elasticsearch迁移到Qdrant:向量原生架构升级实战指南

1. 项目概述:为什么这次迁移不是“换个数据库”,而是一次架构级的清醒我亲手参与过七次从 Elasticsearch 迁移到 Qdrant 的生产环境落地,其中四次是凌晨三点被电话叫醒处理线上搜索降级——不是因为 Qdrant 崩了,而是因为 Elastic…

作者头像 李华
网站建设 2026/6/25 17:56:50

nLighten CEO谈边缘数据中心与数据主权的现实挑战

nLighten公司斥资1500万英镑对其布里斯托尔数据中心进行翻新改造,这一举措体现了市场中某一细分领域正将赌注押在相对小型的边缘基础设施上,专门面向特定本地高科技客户群体。随着Aztec West设施正式投入使用,我们与nLighten首席执行官Dawn C…

作者头像 李华
网站建设 2026/6/25 17:54:41

英国政府拨款6000万英镑,支持牛津大学与UCL建立AI实验室

英国政府向牛津大学和伦敦大学学院(UCL)提供6000万英镑资金,用于支持两所高校建立实验室,专注于开发下一代人工智能技术。该项目由英国研究与创新署(UKRI)提供支持,两所实验室将探索AI基础层面的…

作者头像 李华
网站建设 2026/6/25 17:50:11

别再卷CRUD了,强烈建议后端直接转Agent开发

如果你后端卷不动想转型,别犹豫了,直接冲Agent开发。老后端其实比AI科班出身的更适合; 我干了6年后端,前年转的Agent开发,涨了40%,还不用担心随时被裁,也是松了口大气。Agent开发的核心能力是系…

作者头像 李华