如何使用消毒剂编译 Clang

ano*_*nol 9 clang address-sanitizer

我刚刚使用 CMake 编译了 Clang,然后尝试运行消毒程序(使用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
Run Code Online (Sandbox Code Playgroud)

然后我转到“如何构建”Address sanitizer 页面,但它只是说:

使用CMake构建 LLVM/Clang 。

这让我回到了第一页。页面中唯一提到“清理”的地方是:

LLVM_USE_SANITIZER:STRING

定义用于构建 LLVM 二进制文件和测试的清理程序。可能的值包括“地址”、“内存”、“MemoryWithOrigins”、“未定义”、“线程”和“地址;未定义”。默认为空字符串。

但这与使用清理程序构建 LLVM 本身有关,而不是在构建后使其可用。

那么,我怎样才能真正构建消毒剂并使其可供 Clang 使用呢?

yug*_*ugr 6

实现 Asan 回调的运行时库位于compiler-rt存储库中,因此您也需要构建它。实现此目的的一种简单方法是在运行 cmake 之前克隆compiler-rtllvm/projects

  • 是这样的 ```cmake -GNinja -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt" source-to-llvm -DCMAKE_BUILD_TYPE=Release``` 吗? (2认同)