CMakeLists.txt 的 C++ AddressSanitizer 导致 asan 错误

C++ AddressSanitizer with CMakeLists.txt results in asan errors

尝试在我的 C++ 项目中使用 AddressSanitizer 工具 (ASan),我得到一个非常详细的输出,其中包含 undefined reference to '__asan_report_store8'undefined reference to '__asan_report_load8',以及其他类似 __asan_stack_malloc_2.我的项目是用 CMake 构建的,我已将以下行添加到我的 CMakeLists.txt:

add_definitions(-fsanitize=address -g3 -fno-omit-frame-pointer)

遵循这些 ASan 示例:

运行 上面的 makefile 示例我得到了预期的漂亮输出(也可以在视频中看到 link)。但是对于我的项目,我得到了这些错误的混乱堆栈跟踪。

备注:

使用 LLVM 消毒器之一将代码编译为 运行 时,您必须将 -fsanitize=... 标志传递给编译器和链接器。使用 CMake,您可以通过调用 target_link_libraries:

来完成此操作
target_link_libraries(MyTarget
  -fsanitize=address
)

或者,如果您不使用现代 CMake,您可以使用 link_libraries 命令

执行相同的操作