Asan dynamic runtime is missing on Ubuntu 18+

Viewed 524

If I compile a simple program (sample.cpp):

#include <cstdio>

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

with a shared sanitizer library, i.e.

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

I am getting the following error when running ./sample:

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

I am getting this error for the sample code on my local machine (Ubuntu 20.04 and clang-12), as well as our build runner (Ubuntu 18.04 and clang-10).

Am I missing something, or shall I submit a bug and to whom? (The options I see are Ubuntu or LLVM/Clang teams)

Please note that this question is distinct from the one that was suggested as duplicate in close votes (this was confirmed by the linked question author in comments).

1 Answers

This is a deficiency of the clang front-end -- when given -shared-libsan flag, it should automatically add -Wl,-rpath=/usr/lib/llvm-NN/lib/clang/MM.M.M/lib/linux to the link line, but it doesn't.

You could do that yourself by using e.g.

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))
Related