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

16

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

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

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

Alex
источник

Ответы:

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 (), а затем генерирование стека трассировки. (Смотрите также латрас .)

DW
источник