Как использовать AddressSanitizer в gcc?

Я пытаюсь построить свой проект с

g++ -O0 -g -fsanitize=address -fno-omit-frame-pointer

но получите много ошибок, таких как:

/home/user/libs/opencv/include/opencv2/core/mat.hpp:715: undefined reference to '__asan_report_load8'

Как скомпилировать проект с поддержкой AddressSanitize?

Моя версия gcc 4.8.4.

Ответы

Ответ 1

Вам нужно добавить коммутатор -lasan в свою командную строку компиляции/ссылки, чтобы связать нужную библиотеку.

Ответ 2

Вам необходимо добавить -fsanitize=address как к флагам компилятора (CFLAGS, CXXFLAGS), так и к флагам компоновщика (LDFLAGS). Вы, вероятно, добавили его только к своим флагам компилятора.

Обратите внимание, что использование явной связи библиотеки -lasan широко не поощряется разработчиками ASan (например, здесь), поскольку в ней отсутствуют некоторые другие важные параметры. Единственный рекомендуемый способ ссылки - использовать -fsanitize=address.

Как примечание, для более агрессивных флагов проверки проверьте Asan FAQ.

Ответ 3

Убедитесь, что у вас установлен libasan. Например, в Fedora:

dnf install libasan libasan-static