我正在尝试用
构建我的项目g++ -O0 -g -fsanitize=address -fno-omit-frame-pointer
但是会遇到很多错误:
/home/user/libs/opencv/include/opencv2/core/mat.hpp:715: undefined reference to `__asan_report_load8'
如何使用AddressSanitize支持编译项目?
我的gcc版本是4.8.4。
答案 0 :(得分:50)
您需要将-fsanitize=address
添加到编译器标志(CFLAGS
,CXXFLAGS
)和链接器标志(LDFLAGS
)。您可能只是将它添加到编译器标志中。
请注意,ASan开发人员(例如here)普遍不鼓励使用显式-lasan
选项,因为它错过了一些其他重要的链接器标志。唯一推荐的链接方式是使用-fsanitize=address
。
作为旁注,对于更积极的验证标志,请检查Asan FAQ(寻找“更积极的诊断”)。
答案 1 :(得分:4)
您需要将开关-lasan
添加到编译/链接命令行以链接正确的库。
答案 2 :(得分:4)
确保已安装libasan。例如,在Fedora中:
dnf install libasan libasan-static