当前位置: 首页 > news >正文

编译 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++

http://www.jsqmd.com/news/1076368/

相关文章:

  • Jeecg-Boot积木报表权限绕过漏洞深度剖析与修复指南
  • 技术迭代升级,GPT-Image-2领跑商用生图赛道
  • 终极指南:如何通过开源macOS应用集合彻底改变你的工作流
  • 【黑金云课堂】FPGA技术教程Linux开发:DP音频播放与VCU视频解码
  • 基于Transformer的Wi-Fi室内定位技术解析与实践
  • 10B参数小模型如何在边缘设备高效落地
  • AI光刻套刻优化:Overlay误差降低40%,提升先进制程良率
  • 从零到一:打造完全离线的多语言翻译服务实战指南
  • RAG实战:用LangGraph构建可信闭环问答系统
  • Vibe Coding 全栈开发常用 Skills
  • Docker on VMware环境安全加固 checklist(CIS Benchmark v2.0合规版):17项必须关闭的服务、9个默认暴露端口及3种网络隔离模式选择决策树
  • 终极指南:689款开源macOS应用完整清单,免费提升你的工作效率![特殊字符]
  • 如何科学筛选与验证计算机视觉顶会论文
  • LangGraph 实战 Demo7:反思式多Agent协作 — 让AI学会“自我审视与迭代“
  • 苹果Siri深度集成LLM:系统级大模型架构解析
  • 现代汽车3.25亿美元全资收购波士顿动力,欲借Atlas机器人布局全球工厂
  • 开源项目维护者应重代码质量而非来源!自主编程趋势不可挡
  • 终极Windows系统维护指南:Dism++让你的电脑重获新生!
  • 2026年AI生图工具盘点:自媒体人做配图,终于不用到处找了
  • DeepSpeed-Chat:工业级RLHF工程化实战框架解析
  • 七牛云送1000W大模型token,可用claude
  • SAP Signavio Process,流程透明化、流程挖掘和企业转型之间的那座桥
  • 终极指南:告别重复格式化,Ventoy打造你的万能启动U盘
  • 7个技巧快速掌握Ryzen系统调试工具:终极AMD处理器优化指南
  • 分数阶拉普拉斯算子:定义的非唯一性如何影响科学与工程计算
  • H800+DeepSeek-R1:开源大模型训练的工程真相与实操指南
  • ISC.AI 2026在京开幕:智能体时代安全治理从共识走向行动
  • 飞时达FastTFT软件安装步骤(附安装包)FastTFT v17.1 超详细下载安装教程
  • 5分钟学会Android自动打卡:DailyTask让你的考勤更智能
  • VS Code 支持 BYOK 本地模型开发,内联建议仍需第三方工具补足