Как отследить загрузку библиотеки?


16

У меня есть программа, которая зависит от библиотеки, которая связана с libboost 1.67, который установлен в системе. Когда я запускаю его, у меня возникает ошибка, libboost_system.so.1.58которой не существует. LD_PRELOADи LD_LIBRARY_PATHне установлены.

lddtreeвыполнение не показывает эту библиотеку как зависимость, но lddделает.

Как я могу проследить, откуда требуется библиотека?

Ответы:


16

Если в системе GNU, попробуйте запустить ваше приложение с:

LD_DEBUG=libs your-application

Смотрите LD_DEBUG=helpбольше вариантов или man ld.so.


когда я пытаюсь LD_DEBUG = libs python3.6 на tcsh, я получаю команду LD_DEBUG не найдена. Какова альтернатива tcsh?
gansub

1
@gansub префикс команды envв tcsh
Стефан

6

Если программа загружает libboost_system вручную с помощью dlopen (), вы можете найти, где она это делает, с помощью ltrace, чтобы увидеть, вызывает ли она dlopen (), и, возможно, gdb, чтобы установить точку останова на вызовах dlopen (), а затем генерирование стека трассировки. (Смотрите также латрас .)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.