如何在gcc中使用AddressSanitizer?

时间:2016-06-22 14:17:30

标签: gcc address-sanitizer

我正在尝试用

构建我的项目
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。

3 个答案:

答案 0 :(得分:50)

您需要将-fsanitize=address添加到编译器标志(CFLAGSCXXFLAGS)和链接器标志(LDFLAGS)。您可能只是将它添加到编译器标志中。

请注意,ASan开发人员(例如here)普遍不鼓励使用显式-lasan选项,因为它错过了一些其他重要的链接器标志。唯一推荐的链接方式是使用-fsanitize=address

作为旁注,对于更积极的验证标志,请检查Asan FAQ(寻找“更积极的诊断”)。

答案 1 :(得分:4)

您需要将开关-lasan添加到编译/链接命令行以链接正确的库。

答案 2 :(得分:4)

确保已安装libasan。例如,在Fedora中:

dnf install libasan libasan-static