Serge Rogatch
Serge Rogatch

Reputation: 15100

Asan dynamic runtime is missing on Ubuntu 18+

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

Upvotes: 4

Views: 2078

Answers (1)

Employed Russian
Employed Russian

Reputation: 213935

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

Upvotes: 4

Related Questions