Как использовать 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 -v
gcc версии 4.8.4
4 ответов
вам нужно добавить переключатель -lasan
в командной строке компиляции/ссылки, чтобы связать правильную библиотеку.
вам нужно добавить -fsanitize=address
для обоих флагов компилятора (CFLAGS
, CXXFLAGS
) и компоновщика флаги (LDFLAGS
). Вероятно, вы добавили его только в флаги компилятора.
обратите внимание, что вместо использования явного -lasan
канонический способ-это добавить -fsanitize=address
к вашим флагам компоновщика. Используя -lasan
был широко обескуражен разработчиками ASan (например,здесь).
в качестве примечания, для более агрессивных флагов проверки проверьте ASAN FAQ.
- вы не должны связать с -lasan
при использовании -fsanitize
я исправил ошибки asan, добавив дополнительные параметры fsanitize:
CFLAGS+="-fsanitize=address -fsanitize-recover=address -U_FORTIFY_SOURCE <br> -fno-omit-frame-pointer -fno-common"
LDFLAGS += -fsanitize=address
получил их по этой ссылке: