In Windows verfügen EXE und DLL über Versionsinformationen, die mindestens die folgenden Felder enthalten:
- Dateiversion
- Produktversion
- Interner Name
- Produktname
- Urheberrechte ©
In der Linux Library / Executable:
- Welche Felder sind vorhanden?
- Wie kann man solche Informationen anzeigen?
- Welche Tools / Bibliotheken sollen gelesen werden?
executable
libraries
version
linquize
quelle
quelle
/sbin/ldconfig -p
Antworten:
Die Versionsinformationen werden nicht explizit in einer ELF-Datei gespeichert . Was Sie dort haben, ist der Name der Bibliothek, die
soname
die Hauptversion enthält. Die Vollversion wird normalerweise als Teil des Bibliotheksdateinamens gespeichert.Wenn Sie eine Bibliothek haben, sagen wir
libtest.so
, dann haben Sie normalerweise:libtest.so.1.0.1
- Die Bibliotheksdatei selbst, die die Vollversion enthältlibtest.so.1
- Symlink zulibtest.so.1.0.1
, mit dem gleichen Namen wiesoname
libtest.so
- Symlink zumlibtest.so.1
Verlinken.In der Bibliotheksdatei
libtest.so.1.0.1
gibt es einen EintragSONAME
im dynamischen Bereich, der besagt, dass diese Bibliothek aufgerufen wirdlibtest.so.1
. Wenn Sie ein Programm mit dieser Bibliothek verknüpfen, speichert das verknüpfte Programmsoname
die Bibliothek unter demNEEDED
Eintrag im dynamischen Bereich.Wenn Sie überprüfen möchten, was genau in welcher ELF-Datei enthalten ist, können Sie versuchen, Folgendes auszuführen:
Dabei
elffile
kann es sich entweder um eine Bibliothek einer ausführbaren Datei handeln.Wenn Sie einfach nur die Bibliotheksversion erhalten möchten, können Sie damit spielen:
AFAIK, es gibt keine solchen Informationen (zumindest nicht standardmäßig) in ausführbaren Dateien.
Oder Sie können sich auf das Programm selbst oder auf Ihr Verpackungssystem verlassen, wie Rahul Patil schrieb.
quelle
Sie können verwenden
ldconfig -v | grep libraryname
, auch Befehl hat Optioncommand -V
oderbinaryfile --version
Beispiel:
Sie können auch yum oder aptitude verwenden, basierend auf der Distribution, die Sie verwenden, z.
In RHEL5 / CENTOS5 / Fedora können Sie verwenden,
yum info packagename
oder wenn es installiert ist, verwenden Sierpm --version packagename
In Ubuntu können Sie
aptitude show pkgname
oder verwendendpkg --version pkgname
quelle
rpm
, ich glaube , Sie wollenrpm --query pkgname
die Version Zeichenfolge zur Liste (rpm --version
druckt die Version vonrpm
sich selbst, ebenso wahr sein könnte fürdpkg
)Gehen Sie für Redhat-basierte Systeme wie folgt vor:
Checken Sie die Datei "needed-packages" aus und vergewissern Sie sich, dass die Bibliotheksdateinamen keine Pfadnamen enthalten. Wenn ja, entferne sie, also "/bin/lib/libx.so.1" ändere sie in "libx.so.1"
Finden Sie heraus, welches Paket die Bibliothek enthält
Oder fügen Sie dies in ein Skript ein oder führen Sie es in der Befehlszeile aus:
Erstellen Sie als Nächstes das folgende Skript oder führen Sie es in der Befehlszeile aus:
Sie sind fertig, führen Sie Ihr Programm aus. Wenn Sie GUI-Fehler beim Ausführen erhalten. Kopieren Sie sie nach unten, und wenn es sich um Bibliotheksreferenzen handelt, suchen Sie die entsprechenden Pakete und installieren Sie sie auf die gleiche Weise.
quelle
Führen Sie dies aus, um Versionsinformationen zu erhalten -
strings libssl.so.1.0.0 | grep "1\.0"
quelle