Я добавил флаг 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
непосредственно.Так в чем же проблема с этими двумя решениями?
DYLD_INSERT_LIBRARIES
переменная окружения, указывающая на libclang_rt.asan_osx_dynamic.dylib
,Кроме того, в качестве другого решения я попытался включить флаг Address Sanitizer из целевой схемы XCode, но, что интересно, он не обнаружил добавленные мной проблемы, поэтому я не перечислил это как решение, потому что он не прошел мой тест.
Любая помощь будет высоко ценится.
Вы также должны предоставить флаг (ы) компоновщику. Я делаю это так:
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
cmake 3.13
ввести конфигурацию для схема xcode
в CMake
cmake_minimum_required(VERSION 3.13)
set(CMAKE_XCODE_GENERATE_SCHEME ON)
set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER ON)
set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN ON)
Когда строить
xcodebuild -enableAddressSanitizer YES