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

佐手、 提交于 2021-02-05 05:28:12

问题


Trying to use the AddressSanitizer tool (ASan) on my C++ project, I get a very verbose output full of undefined reference to '__asan_report_store8' and undefined reference to '__asan_report_load8', and others like __asan_stack_malloc_2. My project is built with CMake, and I've added the following line to my CMakeLists.txt:

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

following these ASan examples:

  • Example with makefile
  • Jason Turner quick intro video

Running the above makefile example I get the expected pretty output (which can also be seen in the video link). But for my project I'm getting a messy stack trace of those errors.

Notes:

  • ubuntu 16.04
  • I've set the environment variables ASAN_OPTIONS=symbolize=1 and ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer in order to print the line numbers in the ASan output

回答1:


When compiling code to be run with one of the LLVM Sanitizers, you have to pass the -fsanitize=... flag to both the compiler and the linker. With CMake, you can do this by calling target_link_libraries:

target_link_libraries(MyTarget
  -fsanitize=address
)

Alternatively, if you aren't using modern CMake, you can do the same with the link_libraries command



来源:https://stackoverflow.com/questions/50163828/c-addresssanitizer-with-cmakelists-txt-results-in-asan-errors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!