如何使用消毒剂编译Clang

时间:2019-07-02 07:26:02

标签: clang address-sanitizer

我只是compiled Clang using CMake,然后尝试运行消毒剂(使用clang -fsanitize=address),但是得到了:

/usr/bin/ld: cannot find <CLANG_DIR>/9.0.0/lib/linux/libclang_rt.asan-x86_64.a:
  No such file or directory

然后我去了"How to build" Address sanitizer page,但它只是说:

  

使用CMake构建LLVM / Clang。

这将我带回到第一页。在页面中任何地方唯一提到的“消毒”是:

  

LLVM_USE_SANITIZER:STRING

     

定义用于构建LLVM二进制文件和测试的清理程序。可能的值为Address,Memory,MemoryWithOrigins,Undefined,Thread和Address; Undefined。默认为空字符串。

但这与使用消毒剂自身构建LLVM有关,而不与在构建之后使它们可用。

那么,我该如何实际构建消毒器并使它们可用于Clang?

1 个答案:

答案 0 :(得分:1)

可实现Asan回调的运行时库位于compiler-rt回购中,因此您也需要对其进行构建。一种简单的方法是在运行cmake之前将compiler-rt克隆到llvm/projects