неопределенный символ: __asan_option_detect_stack_use_after_return

Я пытаюсь скомпилировать С++, используя средство очистки адресов clang для вывода результатов очистки в дампе ядра, поэтому я добавил:

CXXFLAGS += -fsanitize=address

чтобы иметь параметры компилятора:

/opt/llvm-3.8.0/bin/clang++ --gcc-toolchain=/opt/gcc-5.2.0 -fsanitize=address -DLINUX -DLINUX64 -DTB_USE_RCU -DURCU_INLINE_SMALL_FUNCTIONS -DU_USING_ICU_NAMESPACE=0 -DNDEBUG -D_POSIX_PTHREAD_SEMANTICS -fPIC -D_GNU_SOURCE -DTB_USE_RCU -DTB_USE_RCU -D_GLIBCXX_USE_CXX11_ABI=0 -m64 --gcc-toolchain=/opt/gcc-5.2.0 -flto=full -std=gnu++14 -D_GLIBCXX_DEPRECATED= -pipe -fno-omit-frame-pointer -ffast-math -fno-finite-math-only -pthread -march=core2 -mtune=corei7 -g -O3 -Qunused-arguments -fnon-call-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -Wshadow -Wpointer-arith -Wno-self-assign -Wno-unused-function -Wno-gnu-empty-initializer -Wno-unused-parameter -Wno-ignored-qualifiers -Wno-mismatched-tags -Wno-unused-local-typedef -Wno-parentheses-equality -Wno-unused-private-field -Wno-missing-field-initializers -Wno-missing-braces -Werror=return-type -Werror=overloaded-virtual -c MyClass.cpp -o MyClass.o

но я получаю сообщение об ошибке:

undefined symbol: __asan_option_detect_stack_use_after_return

Какой самый простой способ решить эту проблему?


person mezamorphic    schedule 30.05.2018    source источник
comment
Вам также понадобится LDFLAGS=-fsanitize=address. Флаги дезинфицирующего средства также должны быть переданы компоновщику.   -  person Justin    schedule 30.05.2018
comment
@Justin, это само по себе не решило проблему (я еще не пробовал ответ ниже)   -  person mezamorphic    schedule 31.05.2018
comment
@Justin Это должен быть ответ.   -  person yugr    schedule 31.05.2018
comment
@mezamorphic Вы установили ссылку на -fsanitize=address? Разработчики Asan не рекомендуют использовать -lasan.   -  person yugr    schedule 31.05.2018
comment
@mezamorphic Пожалуйста, проверьте мой ответ на 50621054 и проголосуйте, если он поможет. После этого мы сможем закрыться как дубликат.   -  person yugr    schedule 31.05.2018
comment
Я думаю, что это не дубликат: OP описывает проблему при использовании -fsanitize=address в сочетании с -fvisibility=hidden -fvisibility-inlines-hidden. Тем не менее, во время выполнения LD_PRELOAD=libclang_rt.asan.so является допустимым обходным путем.   -  person Ax3l    schedule 17.02.2019
comment
Кажется, это зависит от сценария CMake. Локально воспроизводя проблему, я вижу это только тогда, когда действительно -fsanitize=address отсутствует в строках компоновщика (я все еще вижу проблему OP в более крупном проекте, хотя мой подробный вывод make включает это во время ссылки)   -  person Ax3l    schedule 17.02.2019