Получение неопределенного символа: __asan_memset при попытке использовать очиститель адресов Clang - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь использовать адресное средство для очистки адресов с clang для компиляции приложения C ++, но получаю следующую ошибку:

/ Class.so: неопределенный символ: __asan_memset

Я добавил -fsanitize = address к флагам компилятора

/ opt / llvm-3.8.0 / bin / clang ++ -M --gcc-toolchain = / opt / gcc-5.2.0 -fsanitize = address

, и я добавил -fsanitize = address и -lasan к флагам компоновщика:

-fsanitize = address -lasan -shared -fuse-ld =gold-2.25 -o Class.so Class.o

Что еще мне нужно сделать, чтобы это заработало?

1 Ответ

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

Ваш основной исполняемый файл, вероятно, не связан с -fsanitize=address.По умолчанию Clang связывает библиотеку времени выполнения Asan (которая предоставляет определения __asan_memset и другие символы Asan) только с исполняемым файлом, а не с общими библиотеками, и это вызывает ошибки в вашем случае.

Чтобы обойти это, вы можете либоперезапустите исполняемый файл с -fsanitize=address или перекомпоновайте очищенные кусочки с -shared-libasan и запустите с LD_PRELOAD=libclang_rt.asan.so.

Для получения дополнительной информации см. AsanDSO wikipage .

...