我正在尝试使用 Address Sanitizer 编译一个 python 扩展。当我加载扩展时,我得到
Traceback (most recent call last):
File "test.py", line 2, in <module>
from extension import package
File "/tmp/python_test/extension/package.py", line 28, in <module>
from extension._ext import *
ImportError: /tmp/python_test/extension/_ext.so: undefined symbol: __asan_version_mismatch_check_v8
Run Code Online (Sandbox Code Playgroud)
编译器调用是
clang -g -o _ext.so code.ll -fsanitize=address -lrt -lpthread -ldl -lstdc++ -lm -fPIC -shared
Run Code Online (Sandbox Code Playgroud)
因此,它不会从 asan 正确加载符号。我试过使用-static-libsan,但结果是一样的。
我已经看到有些人习惯LD_PRELOAD将 Asan 放入共享对象中,但是,似乎libasan.so我系统上的 Address Sanitizer 来自不同版本的 Address Sanitizer(从 Debian 的 libasan3 包安装,而我从 deb http://apt .llvm.org/stretch/ llvm-toolchain-stretch-8 主)。
那么,如何使 Address Sanitizer 与共享对象库一起使用?要么,我需要正确的版本 …