You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译LLVM(release/16.x)clang链接时内存不足报错求助

问题描述

工具版本

OS: Ubuntu 20.04.1 LTS
ld: 2.34
gold: GNU gold (GNU Binutils for Ubuntu 2.34) 1.16
gcc/g++: 9.4.0
cmake: 3.26.0
ninja: 1.10.0

硬件配置

memory: 16 GiB
CPU: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz

编译操作

克隆llvm-project的release/16.x分支,创建并进入build目录后执行:

user@system:~/llvm-project/build$ cmake -G "Ninja" -DLLVM_ENABLE_PROJECTS="lld;clang" -DLLVM_TARGETS_TO_BUILD="RISCV" -DCMAKE_BUILD_TYPE="Debug" -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_PARALLEL_COMPILE_JOBS=1 -DLLVM_PARALLEL_LINK_JOBS=1 ../llvm

user@system:~/llvm-project/build$ ninja -j 1

报错情况

LLVM核心编译顺利完成,但链接bin/clang-16时系统卡顿(疑似内存占用过高),一段时间后报错:

[0/613] Linking CXX executable bin/clang-16
FAILED: bin/clang-16
: && /usr/bin/c++ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra
-Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long
-Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move
-Wno-noexcept-type ...
...
...
... lib/libLLVMDemangle.a -lrt -ldl -lpthread -lm && :
collect2: fatal error: ld terminated with signal 9 [killed]
compilation terminated.
ninja: build stopped: subcommand failed.

求助需求

因需修改LLVM和Clang源码,不能使用Release构建。推测问题出在静态链接导致内存过载,求可行的CMake参数组合解决该问题。


解决办法

针对Debug模式下静态链接内存占用过高的问题,可通过以下CMake参数调整解决:

  • 启用动态链接LLVM库:添加-DLLVM_BUILD_SHARED_LIBS=On,将LLVM编译为动态库,链接Clang时内存占用会大幅降低,这是最直接有效的方案。
  • 改用lld链接器:添加-DLLVM_USE_LINKER=lld,lld的内存效率远高于GNU ld,即使保持静态链接,也能显著减少内存消耗。
  • 精简编译组件:如果暂时不需要lld,可将LLVM_ENABLE_PROJECTS改为仅clang;若后续需要再添加回来。(目前已指定RISCV目标架构,可保留)
  • 启用增量链接(可选):添加-DLLVM_USE_INCREMENTAL_LINKING=On,该参数对GNU ld的内存优化有限,优先级低于前两种方案。

调整后的完整CMake命令示例:

cmake -G "Ninja" \
  -DLLVM_ENABLE_PROJECTS="lld;clang" \
  -DLLVM_TARGETS_TO_BUILD="RISCV" \
  -DCMAKE_BUILD_TYPE="Debug" \
  -DLLVM_ENABLE_ASSERTIONS=On \
  -DLLVM_PARALLEL_COMPILE_JOBS=1 \
  -DLLVM_PARALLEL_LINK_JOBS=1 \
  -DLLVM_BUILD_SHARED_LIBS=On \
  -DLLVM_USE_LINKER=lld \
  ../llvm

注意事项

  • 启用动态链接后,运行Clang时需确保动态库路径正确,可通过export LD_LIBRARY_PATH=/path/to/llvm-project/build/lib设置。
  • 如果系统未安装lld,需先执行sudo apt install lld安装。

内容的提问来源于stack exchange,提问作者anurag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 08:47:33