Я добавил флаг AddressSanitizer следующим образом:
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
Все работает и работает отлично при использовании Unix Makefiles
.
Проблема возникает при создании проекта Xcode, он просто не хочет ссылаться, потому что он не может найти библиотеку ASan.
Я уже нашел два решения, но решил не использовать их, потому что они не могут быть автоматизированы с использованием только CMake:
- Добавление
-Wl,-undefined,dynamic_lookup
к связанным флагам, поэтому он пропускает ссылку на динамические библиотеки. - Прямая ссылка на
libclang_rt.asan_osx_dynamic.dylib
.
Итак, какая проблема с этими двумя решениями?
- При использовании решения # 1 мне нужно вручную открыть целевую схему в Xcode и добавить переменную среды
DYLD_INSERT_LIBRARIES
, указывающую наlibclang_rt.asan_osx_dynamic.dylib
. - При использовании решения №2 путь для библиотеки ASan изменяется между компьютерами.
Кроме того, в качестве другого решения я попытался включить флаг Address Sanitizer из целевой схемы Xcode, но интересно, что он не обнаружил проблем, которые я добавил, поэтому я не перечислил это как решение, потому что он не прошел мой тест.
Любая помощь будет очень оценена.