Как правильно включить AddressSanitizer в CMake, который работает в Xcode

Я добавил флаг AddressSanitizer следующим образом:

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")

Все строит и работает нормально при использовании Unix Makefiles,

Проблема возникает при создании проекта Xcode, он просто не хочет связываться, потому что не может найти библиотеку ASan.

Я уже нашел два решения, но решил не использовать их, потому что они не могут быть автоматизированы с помощью только CMake:

  1. Добавление -Wl,-undefined,dynamic_lookup на связанные флаги, поэтому он пропускает ссылки на динамические библиотеки.
  2. Связать с libclang_rt.asan_osx_dynamic.dylib непосредственно.

Так в чем же проблема с этими двумя решениями?

  • При использовании решения № 1, я должен вручную открыть целевую схему в XCode и добавить DYLD_INSERT_LIBRARIES переменная окружения, указывающая на libclang_rt.asan_osx_dynamic.dylib,
  • При использовании решения № 2 путь к библиотеке ASan варьируется между компьютерами.

Кроме того, в качестве другого решения я попытался включить флаг Address Sanitizer из целевой схемы XCode, но, что интересно, он не обнаружил добавленные мной проблемы, поэтому я не перечислил это как решение, потому что он не прошел мой тест.

Любая помощь будет высоко ценится.

13

Решение

Вы также должны предоставить флаг (ы) компоновщику. Я делаю это так:

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")
5

Другие решения

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
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector