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?

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.


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 .)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.