C ++ AddressSanitizer с CMakeLists.txt приводит к ошибкам asan - PullRequest
0 голосов
/ 04 мая 2018

Пытаясь использовать инструмент AddressSanitizer (ASan) в моем проекте C ++, я получаю очень подробный вывод, полный undefined reference to '__asan_report_store8' и undefined reference to '__asan_report_load8' и других, таких как __asan_stack_malloc_2. Мой проект построен с использованием CMake, и я добавил следующую строку в мой CMakeLists.txt:

add_definitions(-fsanitize=address -g3 -fno-omit-frame-pointer)

после этих примеров ASan:

Запустив приведенный выше пример с make-файлом, я получаю ожидаемый симпатичный вывод (который также можно увидеть в ссылке на видео). Но для моего проекта я получаю грязный след от этих ошибок.

Примечания:

  • Ubuntu 16.04
  • Я установил переменные окружения ASAN_OPTIONS=symbolize=1 и ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer, чтобы печатать номера строк в выводе ASan

1 Ответ

0 голосов
/ 04 мая 2018

При компиляции кода для запуска с одним из Sanitizer LLVM необходимо передать флаг -fsanitize=... как компилятору, так и компоновщику. С CMake вы можете сделать это, позвонив по номеру target_link_libraries:

target_link_libraries(MyTarget
  -fsanitize=address
)

В качестве альтернативы, если вы не используете современный CMake, вы можете сделать то же самое с помощью команды link_libraries

...