2016-06-22 3 views
18

Я пытаюсь построить свой проект сКак использовать 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

Это не полная строка компиляции, так как у вас нет имени файла. Вы компилировали/связывали отдельные шаги? Вы также забыли упомянуть версию gcc, которую используете ... –

ответ

4

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

20

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

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

+0

Если я пропущу '-lasan', Im получает' неопределенную ссылку на __asan _... ' – HeinrichStack

+0

@HeinrichStack Трудно комментировать без повторения. Обратите внимание, что '-fsanitize = address' эквивалентно' -lasan' + другому. – yugr

 Смежные вопросы

  • Нет связанных вопросов^_^