【问题标题】:How to compile Clang with sanitizers如何使用 sanitizers 编译 Clang
【发布时间】:2019-07-02 07:26:02
【问题描述】:

我只是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 二进制文件和测试的 sanitizer。可能的值是地址、内存、MemoryWithOrigins、未定义、线程和地址;未定义。默认为空字符串。

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

那么,我怎样才能真正构建 sanitizers 并使它们可用于 Clang?

【问题讨论】:

    标签: clang address-sanitizer


    【解决方案1】:

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

    【讨论】:

    • 是这样的cmake -GNinja -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt" source-to-llvm -DCMAKE_BUILD_TYPE=Release 吗?
    • 是的,如果所有三个 repos 并排在同一个文件夹中,您的命令将起作用。如果您将clangcompiler-rt 存储库克隆到llvm/tools/clangllvm/projects/compiler-rt 存储库中(如 中所述),您可以只执行cmake -GNinja source-to-llvm -DCMAKE_BUILD_TYPE=Release
    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 2021-04-05
    • 2011-12-20
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2012-01-19
    相关资源
    最近更新 更多