从gcc / clang

时间:2018-02-16 18:52:53

标签: gcc clang address-sanitizer

当我使用-fsanitize=address进行编译时,GCC / Clang隐式使用ASAN动态库,该库为ASAN提供运行时支持。如果您的构建库是由另一个应用程序动态加载的,则必须将LD_PRELOAD设置为包含此动态库,以便它在应用程序启动时运行。

libasan.so GCC / Clang期望使用的副本通常不明显,因为您的系统上可能有多个ASAN副本(如果您安装了多个编译器。)是否有可靠的方法来确定您需要加载的共享库的位置?

1 个答案:

答案 0 :(得分:1)

您可以通过ldd从库本身提取libasan路径:

$ echo 'void foo() {}' | gcc -x c -fPIC -shared -fsanitize=address -
$ ldd a.out | grep libasan.so | awk '{print $3}'
/usr/lib/x86_64-linux-gnu/libasan.so.4