67

我正在尝试构建我的项目

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。

4

3 回答 3

141

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

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

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

于 2016-10-24T10:03:57.307 回答
9

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

dnf install libasan libasan-static

于 2018-07-28T14:31:27.887 回答
2

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

注意:根据评论,原始答案 -lasan 已过时,不应使用

于 2016-06-22T14:29:19.133 回答