Wie verfolge ich das Laden der Bibliothek?

16

Ich habe ein Programm, das von der Bibliothek abhängt, die mit libboost 1.67 verknüpft ist und auf dem System installiert ist. Wenn ich es starte, habe ich einen Fehler, libboost_system.so.1.58der nicht existiert. LD_PRELOADund LD_LIBRARY_PATHsind unset.

lddtreeDie Ausführung zeigt diese Bibliothek nicht als Abhängigkeit an, lddtut dies aber .

Wie kann ich nachverfolgen, wo die Bibliothek benötigt wird?

Alex
quelle

Antworten:

16

Wenn Sie auf einem GNU-System arbeiten, versuchen Sie Ihre Anwendung mit:

LD_DEBUG=libs your-application

Siehe LD_DEBUG=helpfür mehr Optionen oder man ld.so.

Stéphane Chazelas
quelle
Wenn ich LD_DEBUG = libs python3.6 auf tcsh versuche, wird der Befehl LD_DEBUG nicht gefunden. Was ist die tcsh-Alternative?
Gansub
1
@gansub stellt dem Befehl das Präfix envin tcsh
Stéphane Chazelas (
6

Wenn das Programm libboost_system manuell mit dlopen () lädt, können Sie möglicherweise mithilfe von ltrace herausfinden, wo es dies tut, um festzustellen , ob es dlopen () aufruft, und mit gdb einen Haltepunkt für Aufrufe von dlopen () festlegen und dann Generieren eines Stack-Backtraces. (Siehe auch Latrace .)

DW
quelle