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