I've added AddressSanitizer flag as follow:
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
Everything builds and runs fine when using Unix Makefiles
.
The problem comes when generating the Xcode project, it just doesn't want to link because it cannot find the ASan library.
I already found two solutions, but decided not to use them because they cannot be automated using just CMake:
- Adding
-Wl,-undefined,dynamic_lookup
to the linked flags, so it skips linking to dynamic libraries. - Link with
libclang_rt.asan_osx_dynamic.dylib
directly.
So what's the problem with these two solutions?
- When using solution #1, I have to manually open the target scheme in Xcode and add
DYLD_INSERT_LIBRARIES
environment variable pointing tolibclang_rt.asan_osx_dynamic.dylib
. - When using solution #2, the path for the ASan library varies between computers.
Additionally as another solution, I tried enabling Address Sanitizer flag from the Xcode target scheme but interestingly it didn't detect the issues I added, so I didn't list this as a solution because it failed my test.
Any help will be much appreciated.
You need to provide the flag(s) to the linker too. I'm doing it like this:
cmake 3.13
introduce configuration for xcode schema
in CMake
When Build
The simplest solution that I currently found is
I prefer this option since it expresses the intent (run sanitizers) rather than modifies a number of flags.
I do not know when this option was added. I also cannot find any documentation to it.