如何使用消毒液编译Clang
我刚刚试着运行一个消毒器(使用如何使用消毒液编译Clang,clang,address-sanitizer,Clang,Address Sanitizer,我刚刚试着运行一个消毒器(使用clang-fsanize=address),但得到了: /usr/bin/ld: cannot find <CLANG_DIR>/9.0.0/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory /usr/bin/ld:找不到/9.0.0/lib/linux/libclang\u rt.asan-x86\u 64.a: 没有这样的文件或目录 然后我去了医院,但它只是说: 使
clang-fsanize=address
),但得到了:
/usr/bin/ld: cannot find <CLANG_DIR>/9.0.0/lib/linux/libclang_rt.asan-x86_64.a:
No such file or directory
/usr/bin/ld:找不到/9.0.0/lib/linux/libclang\u rt.asan-x86\u 64.a:
没有这样的文件或目录
然后我去了医院,但它只是说:
使用构建LLVM/Clang
这让我回到了第一页。在页面中的任何地方,唯一提到的“消毒”是:
LLVM\u使用\u消毒剂:字符串
定义用于构建LLVM二进制文件和测试的消毒器。可能的值包括地址、内存、带来源的内存、未定义的内存、线程和地址;未定义。默认为空字符串
但这与使用净化剂来构建LLVM本身有关,而不是在构建之后使它们可用
那么,我如何才能真正构建消毒器并使其可用于叮当呢?实现Asan回调的运行时库处于repo中,因此您也需要构建它。实现这一点的一个简单方法是在运行cmake之前将
编译器rt
克隆到llvm/projects
。是这样的吗cmake-GNinja-DLLVM\u ENABLE\u projects=“clang;clang tools extra;compiler rt”source到llvm-DCMAKE\u BUILD\u TYPE=Release
?是的,如果所有三个repo都在同一个文件夹中,您的命令就会起作用,肩并肩。如果将clang
和compiler rt
repo克隆到llvm/tools/clang
和llvm/projects/compiler rt
repo(如中所述),则只需执行cmake-GNinja source到llvm-DCMAKE\u BUILD\u TYPE=Release
。