Jak mogę śledzić ładowanie biblioteki?

16

Mam program, który zależy od biblioteki powiązanej z libboost 1.67, która jest zainstalowana w systemie. Po uruchomieniu mam błąd, libboost_system.so.1.58który nie istnieje. LD_PRELOADi LD_LIBRARY_PATHsą rozbrojone.

lddtreewykonanie nie pokazuje tej biblioteki jako zależności, ale lddtak.

Jak mogę śledzić, skąd biblioteka jest wymagana?

Alex
źródło

Odpowiedzi:

16

W systemie GNU spróbuj uruchomić aplikację przy użyciu:

LD_DEBUG=libs your-application

Zobacz LD_DEBUG=helpwięcej opcji lub man ld.so.

Stéphane Chazelas
źródło
kiedy próbuję LD_DEBUG = libs python3.6 na tcsh, otrzymuję polecenie LD_DEBUG nie znaleziono. Jaka jest alternatywa dla tcsh?
gansub
1
@gansub przedrostek polecenia envw tcsh
Stéphane Chazelas
6

Jeśli program ładuje libboost_system ręcznie za pomocą dlopen (), możesz być w stanie dowiedzieć się, gdzie to robi za pomocą ltrace, aby sprawdzić, czy wywołuje dlopen (), a może gdb ustawić punkt przerwania dla wywołań dlopen (), a następnie generowanie śledzenia stosu. (Zobacz także latrace .)

DW
źródło