Soweit ich weiß, handelt es sich um Bibliotheken, aber was ist der Unterschied zwischen den beiden?
Kommentare
- In Verbindung stehender Beitrag – Was ' ist der Unterschied zwischen .so, .la und .a Bibliothek Dateien?
Antwort
A .a
Datei ist eine statische Bibliothek, während eine .so
-Datei eine (dynamische) Bibliothek für gemeinsam genutzte Objekte ist, die einer DLL unter Windows ähnelt. Auf dieser Seite .
Kommentare
-
.a
kann nur als Teil eines Programms aufgenommen werden während des Kompilierens..so
' s können " importiert werden " während ein Programm geladen wird. - Wofür steht .a?
- @hfrmobile Das a steht für archive – eine statische Bibliothek ist Eine Sammlung von Objektdateien, die mit dem Dienstprogramm
ar
erstellt wurden. Weitere Informationen hier
Antwort
Im Folgenden ist eine .a-Datei ein „ar“ -Archiv. Ähnlich wie ein Teerarchiv speichert sie .o oder ein Objekt Dateien, mit denen sie unter anderem aus dem Archiv abgerufen und mit einem Programm verknüpft werden können. Sie können ar verwenden, um andere Dateien zu speichern, wenn Sie möchten.
Mit dem Parameter -t können Sie eine Liste der Mitglieder einer ar-Datei abrufen, z. B.:
ar -t /usr/lib/libc.a
Eine .so-Datei ist eine „Shared Object“ -Datei und verfügt über viel mehr Informationen, die dem Linker zur Verfügung stehen, damit Mitglieder so schnell wie möglich mit einem Ladeprogramm verknüpft werden können.
Versuchen Sie beispielsweise:
objdump -T /lib/libc-2.11.1.so
(oder eine beliebige Version von libc.so, die Sie in Ihrem / lib-Verzeichnis haben.) Beachten Sie, dass eine .so-Datei auch nur ein Linker-Skript enthalten kann, das sie zum Auffinden der Datei an anderer Stelle oder verwenden Sie etwas anderes.
Interessanterweise kann eine .so-Datei auch ein vollwertiges Programm sein. Versuchen Sie beispielsweise, /lib/libc.so.6 auszuführen. (Leider scheint dieser letzte Teil auf moderneren Systemen nicht zu funktionieren. Nicht, dass es ein großer Verlust wäre.)
Kommentare
- Tippfehler . Sie wollen
ar -t /usr/lib/libc.a
schreiben. Tatsächlich scheint die-
in diesem Fall nicht ' notwendig zu sein. Auch/lib/libc.so.6.
druckt nur eine Ausgabe. Ich weiß nicht, ob ich esfull fledged program
nennen würde. - Es ' ist ein vollwertiges Programm in dem Sinne, dass es ein Hauptsymbol für exec hat.
- Sie können
ldd
auch auf .so ' s, und es zeigt Ihnen, welche anderen Bibliotheken es verwendet. Static wird mit der Meldung zurückgegeben, dass ' keine dynamische Bibliothek ist.