Angenommen, ich möchte testen, ob eine Bibliothek installiert und von einem Programm verwendbar ist. Ich kann verwenden ldconfig -p | grep mylib
, um herauszufinden, ob es auf dem System installiert ist. aber was ist, wenn die Bibliothek nur über die Einstellung bekannt ist LD_LIBRARY_PATH
?
In diesem Fall kann das Programm die Bibliothek möglicherweise finden, wird dies jedoch ldconfig
nicht tun. Wie kann ich überprüfen, ob sich die Bibliothek im kombinierten Linkerpfad befindet?
Ich möchte hinzufügen, dass ich nach einer Lösung suche, die auch dann funktioniert, wenn ich das Programm nicht zur Hand habe (z. B. das Programm ist noch nicht kompiliert). Ich möchte nur wissen, dass eine bestimmte Bibliothek in ld
'vorhanden ist. s Pfade.
linux
dynamic-linking
ld
nbubis
quelle
quelle
ldd <binary>
damit überprüfen, ob sich alle verknüpften Bibliotheken im Pfad befinden. Vielleicht gibt es einen eleganteren Weg.ldd
dient genau diesem Zweck.LIBRARY_PATH
Umgebungsvariable verwenden, die zgcc
. B. vom Compiler nachgeschlagen wird . DieLIBRARY_PATH
Umgebungsvariable verfügt auch über eine durch Doppelpunkte getrennte Liste von Verzeichnissen.Antworten:
ldconfig
kann alle Bibliotheken auflisten, auf die es Zugriff hat. Diese Bibliotheken werden auch in ihrem Cache gespeichert./sbin/ldconfig -v -N
crawlt alle üblichen Bibliothekspfade, listet alle verfügbaren Bibliotheken auf, ohne den Cache zu rekonstruieren (was nicht möglich ist, wenn Sie kein Root-Benutzer sind). Bibliotheken in LD_LIBRARY_PATH werden NICHT berücksichtigt (im Gegensatz zu dem, was in diesem Beitrag vor der Bearbeitung gesagt wurde). Sie können jedoch zusätzliche Bibliotheken an die Befehlszeile übergeben, indem Sie die folgende Zeile verwenden:quelle
ldconfig
ist es nicht portabel, da es nur für Implementierungen gilt, die auf dem SunOS-4.0-a.out
basierten dynamischen Linker von 1987 basieren./sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH)
nicht zu viel von einem Overkill nach meinem Geschmack.ldconfig
in einer Vereinbarung mit AT & T entfernt, da das Linker-Caching zu fehlerempfindlich war. Sun später hinzugefügtthe tree stooges
:moe
,lari
undcrle
als Hilfsprogramme für ELF - Management.Ersetzen Sie
:
LD_LIBRARY_PATH global durch (Leerzeichen)quelle
Sie können ein einfaches Testprogramm mit gcc kompilieren und Ihre Bibliothek verknüpfen. Dann können Sie die verwendeten Bibliotheken mit ldd überprüfen. Ich benutze so etwas:
-Wl,--no-as-needed
verhindert, dass der Linker die Bibliothek verwirft, da keine Symbole aus der Bibliothek verwendet werden.quelle