Dodałem AddressSanitizer flagę następująco:Jaki jest właściwy sposób, aby umożliwić AddressSanitizer w CMake, który działa w Xcode
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
Wszystko buduje i działa dobrze podczas korzystania Unix Makefiles
.
Problem pojawia się podczas generowania projektu Xcode, po prostu nie chce się połączyć, ponieważ nie może znaleźć biblioteki ASAN.
ja już znaleźć dwa rozwiązania, ale nie zdecydował się ich używać, ponieważ nie można zautomatyzować przy użyciu tylko CMake:
- Dodawanie
-Wl,-undefined,dynamic_lookup
do połączonego flagami, więc pomija łączenie bibliotek dynamicznych. - Bezpośrednie połączenie z
libclang_rt.asan_osx_dynamic.dylib
.
Jaki jest problem z tymi dwoma rozwiązaniami?
- Przy zastosowaniu rozwiązania nr 1, muszę ręcznie otworzyć schemat docelowej w Xcode i dodać
DYLD_INSERT_LIBRARIES
zmienną środowiskową wskazując nalibclang_rt.asan_osx_dynamic.dylib
. - Podczas korzystania z rozwiązania nr 2 ścieżka do biblioteki ASan różni się w zależności od komputera.
Dodatkowo jako inne rozwiązanie próbowałem włączyć flagę odseparowania adresata ze schematu docelowego Xcode, ale co ciekawe, nie wykryłem problemów, które dodałem, więc nie wymieniłem tego jako rozwiązania, ponieważ mój test się nie powiódł.
Każda pomoc będzie doceniana.
może to sprawdzić: https://github.com/arsenm/sanitizers-cmake – xaxxon
Jeśli znasz otoczeniu projektu Xcode, które zamienia na to, co chcesz, możesz ustaw go z CMake, wypełniając zmienne 'CMAKE_XCODE_ATTRIBUTE _...' lub używając właściwości celu docelowego 'XCODE_ATTRIBUTE _...'. –