我正试着用
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。
lb3vh1jj1#
您需要将-fsanitize=address添加到编译器标志(CFLAGS和CXXFLAGS)和链接器标志(LDFLAGS)中。请注意,ASan开发人员普遍不鼓励使用显式-lasan选项(例如here),因为它会丢失一些其他重要的链接器标志。唯一推荐的链接方式是使用-fsanitize=address。作为附带说明,有关更积极的验证标志,请查看Asan FAQ(查找“更积极的诊断”)。
-fsanitize=address
CFLAGS
CXXFLAGS
LDFLAGS
-lasan
laximzn52#
确保你已经安装了libasan,例如,在Fedora中:dnf install libasan libasan-static
dnf install libasan libasan-static
gkl3eglg3#
您需要将开关-lasan-fsanitize=address添加到 * compile * 和 * link命令行中,以链接正确的库。注:原始答案-lasan已过时,不应使用,根据评论
3条答案
按热度按时间lb3vh1jj1#
您需要将
-fsanitize=address
添加到编译器标志(CFLAGS
和CXXFLAGS
)和链接器标志(LDFLAGS
)中。请注意,ASan开发人员普遍不鼓励使用显式
-lasan
选项(例如here),因为它会丢失一些其他重要的链接器标志。唯一推荐的链接方式是使用-fsanitize=address
。作为附带说明,有关更积极的验证标志,请查看Asan FAQ(查找“更积极的诊断”)。
laximzn52#
确保你已经安装了libasan,例如,在Fedora中:
dnf install libasan libasan-static
gkl3eglg3#
您需要将开关
-lasan
-fsanitize=address
添加到 * compile * 和 * link命令行中,以链接正确的库。注:原始答案-lasan已过时,不应使用,根据评论