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)。但是对于我的项目,我得到了这些错误的混乱堆栈跟踪。
备注:
- ubuntu16.04
- 我设置了环境变量
ASAN_OPTIONS=symbolize=1
和 ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer
以便在 ASan 输出中打印行号
使用 LLVM 消毒器之一将代码编译为 运行 时,您必须将 -fsanitize=...
标志传递给编译器和链接器。使用 CMake,您可以通过调用 target_link_libraries
:
来完成此操作
target_link_libraries(MyTarget
-fsanitize=address
)
或者,如果您不使用现代 CMake,您可以使用 link_libraries
命令
执行相同的操作
尝试在我的 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)。但是对于我的项目,我得到了这些错误的混乱堆栈跟踪。
备注:
- ubuntu16.04
- 我设置了环境变量
ASAN_OPTIONS=symbolize=1
和ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer
以便在 ASan 输出中打印行号
使用 LLVM 消毒器之一将代码编译为 运行 时,您必须将 -fsanitize=...
标志传递给编译器和链接器。使用 CMake,您可以通过调用 target_link_libraries
:
target_link_libraries(MyTarget
-fsanitize=address
)
或者,如果您不使用现代 CMake,您可以使用 link_libraries
命令