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

启用ASAN编译LLVM失败,求正确编译方案及报错解决

编译启用ASAN的LLVM正确方法

你的问题出在同时通过LLVM_ENABLE_PROJECTS和LLVM_USE_RUNTIMES引入compiler-rt,且用ASAN编译LLVM本体时触发了循环依赖——compiler-rt是ASAN的底层实现,当你要求用ASAN编译LLVM时,CMake会尝试用ASAN来构建compiler-rt,但compiler-rt的测试目标会引用还未生成的sanitizer公共目标,导致报错。

修正后的CMake命令(仅给LLVM二进制加ASAN)

如果你的目标只是让clang、lld等LLVM工具带上ASAN检测,不需要在本次编译中构建compiler-rt,用下面的命令:

cmake -G Ninja ../llvm \
-DCMAKE_INSTALL_PREFIX=/home/mikadore/local/llvm15-debug \
-DCMAKE_BUILD_TYPE=Debug \
-DLLVM_ENABLE_PROJECTS='lld;clang;clang-tools-extra' \
-DLLVM_ENABLE_LIBXML2=OFF \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_ENABLE_LIBEDIT=OFF \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_USE_SANITIZER='Address;Undefined' \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_COMPILER=clang

若需同时编译compiler-rt(分两步避免循环依赖)

这种情况必须拆分编译流程,先搭一套基础环境:

  1. 先编译不带ASAN的LLVM+compiler-rt,作为基础编译工具链:
cmake -G Ninja ../llvm \
-DCMAKE_INSTALL_PREFIX=/home/mikadore/local/llvm15-base \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS='lld;clang;clang-tools-extra;compiler-rt' \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_C_COMPILER=gcc
  1. 用这套基础LLVM的clang,重新编译带ASAN的LLVM(可同时包含compiler-rt,此时compiler-rt会用基础clang编译,不会被ASAN插桩):
cmake -G Ninja ../llvm \
-DCMAKE_INSTALL_PREFIX=/home/mikadore/local/llvm15-debug \
-DCMAKE_BUILD_TYPE=Debug \
-DLLVM_ENABLE_PROJECTS='lld;clang;clang-tools-extra;compiler-rt' \
-DLLVM_ENABLE_LIBXML2=OFF \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_ENABLE_LIBEDIT=OFF \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_USE_SANITIZER='Address;Undefined' \
-DCMAKE_CXX_COMPILER=/home/mikadore/local/llvm15-base/bin/clang++ \
-DCMAKE_C_COMPILER=/home/mikadore/local/llvm15-base/bin/clang

关键说明

  • LLVM_USE_SANITIZER参数本身有效,但不能在构建compiler-rt的同时用它给LLVM本体加ASAN,会因依赖顺序冲突报错。
  • 不需要手动复制compiler-rt到llvm子目录,LLVM项目结构会自动识别llvm-project下的compiler-rt目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:15:56