问题
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
andASAN_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