gpt4 book ai didi

c++ - 如何使 AddressSanitizer 不检查第三方库

转载 作者:行者123 更新时间:2023-11-30 03:19:49 26 4
gpt4 key购买 nike

我正在开发一个 C++ cmake 项目。除了我自己的源代码外,我的项目还使用了很多第三方库。因此,我正在使用/usr/local/lib 中存在的共享库(带有 .so 扩展名),对于某些代码,它们存在于/usr/local/include 中。 (就像我正在使用/usr/local/include/eigen3/中存在的 eigen 库一样)。

如何确保 Address Sanitizer 只检查我的源代码而不检查任何标准或第三方库??

PS:目前,我正在使用如下的 Address Sanitizer:

ADD_COMPILE_OPTIONS(-O0 -g -Wall -fsanitize=address -fno-omit-frame-pointer)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")

我正在使用 gcc 的版本:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609

最佳答案

AddressSanitizer 通过在编译期间插入代码(使用 -fsanitize=address 标志)来工作。因此,您的代码链接到的第三方库中的大多数代码将不受影响,也不会被 AddressSanitizer 检查,因为它们已经内置到共享库文件中。如果第 3 方调用标准函数(memset 等),它仍然会被检查。

头文件中的代码和仅包含头文件的库(如 Eigen)是一种特殊情况,因为所有 Eigen 代码都直接插入到您的源文件中(通过包含),因此也使用 -fsanitize=address.

由于编译器不会区分您的代码和包含的第 3 方代码,因此无法为仅 header 的第 3 方代码禁用 sanitizer 。

不过实际上这通常不会引起任何问题。使用 clang 时,您可以创建一个 sanitize-blacklist 文件来隐藏不需要的误报(您无法在上游修复)。不幸的是 gcc 还不支持黑名单。

关于c++ - 如何使 AddressSanitizer 不检查第三方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53393213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com