我正在尝试使用
来构建我的项目。
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。
我正在尝试使用
来构建我的项目。
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。
-lasan
,我会得到undefined reference to __asan_...
。 - HeinrichStack-fsanitize=address
相当于 -lasan
加上其他一些内容。 - yugr-Wl,--no-undefined
一起时,必须将-shared-libasan
添加到链接器标志中。
这也是官方FAQ的一部分,但以防万一,在这里提供此信息也很好。 - Dmitry KochkinLDFLAGS
变量通常用于“链接时使用的gcc标志”)。你可以通过在gcc/clang后面加上-v
标志来查看它会扩展为哪些ld/lld标志。 - yugr请确保您已安装libasan。例如,在Fedora中:
dnf install libasan libasan-static
-static-libasan
时,可能会导致类似的错误。否则,gcc
将发出不同的错误消息(libasan_preinit.o:没有这样的文件或目录
或无法找到-lasan
)。在Ubuntu上,默认情况下使用gcc
安装了libasan
。 - yugr-fsanitize=address
,以链接正确的库。