Ich weiß, dass es einen Befehl gibt, der mir die Bibliotheken und die jeweiligen Versionen auflistet, mit denen eine Software verknüpft war.
Etwas mit ld oder libtool?
Aber ich kann mich einfach nicht erinnern. Habe einige Zeit bei Google verbracht, aber nichts Nützliches gefunden.
Aktualisieren
ldd <binary>
würde unter Linux helfen, (aus@Ernelli), während ich herausgefunden habe, dass es otool -L <binary>
unter MacOS X etwas Ähnliches tut.
Antwort1
Versuchen Sie lddbinär-exe
Beispiel:
~$ ldd /bin/bash
linux-gate.so.1 => (0x00606000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
/lib/ld-linux.so.2 (0x00a41000)
Antwort2
So finden Sie heraus, was Sie direkt benötigen:
readelf -d APP | grep NEEDED
ldd
wie an anderer Stelle erwähnt, werden alle direkten und indirekten Bibliotheken angezeigt – alles, was zur Laufzeit benötigt wird. Dies ist möglicherweise keine vollständige Liste, da Sie Dinge möglicherweise dynamisch mit dlopen() öffnen, aber dies sollte in 99 % der Fälle funktionieren.
ld und libtool werden beim Kompilieren/Verknüpfen verwendet. Sobald Sie eine App haben, sind sie nicht mehr nützlich.
BEARBEITENIch erkenne an späteren Antworten, dass Sie nach OSX gefragt haben, möchte aber meiner Antwort zu Linux-Tools Folgendes hinzufügen:
Eine Sache habe ich vor einiger Zeit vergessen zu erwähnen: Sie haben nach Versionen gefragt. Weder ldd
noch readelf
werden die Frage „Welche Version“ beantworten. Sie werden Ihnen den Dateinamen der Bibliothek nennen, nach der Sie suchen, und die Namenskonvention enthält möglicherweise einige Versionsinformationen, aber nichts erzwingt dies. Symbole können versioniert sein, und Sie müssten noch tiefere Ebenen kennen, um diese zu nm
sehen.
Antwort3
Eine andere Möglichkeit wäre, objdump zu verwenden.
objdump -x "binär" | grep BENÖTIGT
Dies zeigt alle benötigten Abhängigkeiten nur für diese Binärdatei. Sehr nützlich.
Antwort4
DerAndere Antworteinen wichtigen Punkt übersehen:
Gemeinsam genutzte Bibliotheken können entwederdirektverknüpft oderindirektüber eine andere Bibliothek verknüpft.
Nur für diedirekt verlinkt:
objdump --private-headers "${bin}" | grep 'NÖTIG' | cut --delimiter=' ' --fields=18-
Füralle:
ldd "${bin}" | ausschneiden --fields=2 | ausschneiden --delimiter=' ' --fields=1 | rev | ausschneiden --delimiter='/' --fields=1 | rev | sortieren --unique --version-sort