Ubuntu 18+ 上缺少 Asan 动态运行时

如果我编译一个简单的程序(sample.cpp):

#include <cstdio>

int main() {
  printf("Hello,World");
  return 0;
}

具有共享的消毒剂库,即

clang++-12 -fsanitize=address -shared-libsan sample.cpp -o sample

运行 ./sample 时出现以下错误:

./sample: error while loading shared libraries: libclang_rt.asan-x86_64.so: cannot open shared object file: No such file or directory

我在本地机器(Ubuntu 20.04 和 clang-12)以及我们的构建运行程序(Ubuntu 18.04 和 clang-10)上的示例代码中收到此错误。

我是否遗漏了什么,或者我应该向谁提交错误? (我看到的选项是 Ubuntu 或 LLVM/Clang 团队)

请注意,这个问题与在近距离投票中被建议重复的问题不同(链接问题作者在评论中确认了这一点)。

wearcoll658 回答:Ubuntu 18+ 上缺少 Asan 动态运行时

这是 clang 前端的一个缺陷——当给定 -shared-libsan 标志时,它应该自动将 -Wl,-rpath=/usr/lib/llvm-NN/lib/clang/MM.M.M/lib/linux 添加到链接行,但是没有。

你可以自己使用例如

CXX=clang++-12
$CXX -fsanitize=address -shared-libsan sample.cpp -o sample \
   -Wl,-rpath=$(dirname $($CXX --print-file-name libclang_rt.asan-x86_64.so))
本文链接:https://www.f2er.com/18274.html

大家都在问