代码之家  ›  专栏  ›  技术社区  ›  Serge Rogatch

Sanitizer-共享libsan在Ubuntu 20.04/18.04和clang-12/10上不可用

  •  0
  • Serge Rogatch  · 技术社区  · 5 年前

    如果我编译一个简单的程序( 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)上的示例代码中收到了这个错误。

    我是错过了什么,还是应该提交一个bug给谁?(我看到的选项是Ubuntu或LLVM/Cang团队)

    请注意,这个问题是 不同的 在票数接近的情况下被认为是重复的(这一点得到了链接问题作者在评论中的证实)。

    0 回复  |  直到 5 年前
        1
  •  3
  •   Employed Russian    5 年前

    这是的一个缺陷 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))