-fsanitize = address, -stati c -libasan, не удалось увидеть asan libray, связанный с окончательным файлом .so - PullRequest
0 голосов
/ 24 января 2020

Как уже упоминалось, использование -fsanitize = address во время компиляции или создание .so файла автоматически свяжет библиотеку libasan.so, верно?

Я столкнулся с проблемой: -

==13640==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
xrun: *E,ELBERR: Error during elaboration (status 1), exiting.

Я нашел та же проблема и исправление для того же самого здесь: - https://github.com/google/sanitizers/issues/796

Сначала я пытаюсь использовать -fsanitize=address ,-static-libasan флаги для моего компилятора g cc и компоновщика для созданных .so файлов. Созданный файл библиотеки 'libsynsv.so' сам по себе не отображает библиотеку 'asan' как свою зависимость с выводом ldd libsynsv.so.

/ folder / san / client / src / main / cvip / asan / Release /verilog/../lib/libviputil.so: неопределенный символ: __asan_option_detect_stack_use_after_return.

Есть ли какие-либо проблемы с моей командой G CC? Почему моя библиотека не была связана с asan, хотя я запускал с -fsanitize-address.

1 Ответ

0 голосов
/ 26 января 2020

Есть ли какие-либо проблемы с моей командой G CC?

Да: для правильной работы адрес дезинфицирующее средство должен перехватить каждый позвоните на malloc. Таким образом, вы не можете использовать общую библиотеку с помощью -fsanitize=address и загрузить эту библиотеку в основной исполняемый файл, который сам по себе не инструментирован.

Сам созданный файл библиотеки 'libsynsv.so' не отображать библиотеку 'asan' как ее зависимость с выводом ldd libsynsv.so.

Как сказано в комментариях @yugr, -static-libasan игнорируется при связывании общей библиотеки.

Почему моя библиотека не была связана с asan, хотя я запустил с -fsanitize-address.

Поскольку связывание времени выполнения asan с общей библиотекой недостаточно для работы средства очистки адресов.

...