Antworten:
Eine .a
Datei ist eine statische Bibliothek, während eine .so
Datei eine (dynamische) Bibliothek mit gemeinsam genutzten Objekten ist, die einer DLL unter Windows ähnelt. Auf dieser Seite finden Sie einige detaillierte Informationen zu den Unterschieden zwischen den beiden .
.a
kann nur während des Kompilierens in ein Programm eingebunden werden. .so
kann "importiert" werden, während ein Programm geladen wird.
ar
Dienstprogramm erstellt wurden. Weitere Informationen hier
Als Folge davon ist eine .a-Datei ein "ar" -Archiv. Ähnlich wie ein tar-Archiv speichert es .o- oder Objektdateien, sodass diese aus dem Archiv gezogen und unter anderem zu einem Programm verknüpft werden können. Sie können ar verwenden, um andere Dateien zu speichern, wenn Sie möchten.
Sie können eine Liste der Mitglieder einer AR-Datei mit dem Parameter -t abrufen, zum Beispiel:
ar -t /usr/lib/libc.a
Eine .so-Datei ist eine "Shared Object" -Datei, die dem Linker viele weitere Informationen zur Verfügung stellt, damit Mitglieder so schnell wie möglich in ein Ladeprogramm eingebunden werden können.
Versuchen Sie zum Beispiel:
objdump -T /lib/libc-2.11.1.so
(oder welche Version von libc.so auch immer sich in Ihrem / lib-Verzeichnis befindet.) Beachten Sie, dass eine .so-Datei auch nur ein Linkerskript enthalten kann, mit dem die Datei anderswo gesucht oder etwas anderes verwendet wird.
Interessanterweise kann eine .so-Datei auch ein vollwertiges Programm sein. Versuchen Sie beispielsweise, /lib/libc.so.6 auszuführen . (Leider scheint dieser letzte Teil nicht auf moderneren Systemen zu funktionieren. Nicht, dass es ein großer Verlust wäre.)
ar -t /usr/lib/libc.a
. Eigentlich -
scheint das in diesem Fall nicht nötig zu sein. Gibt auch /lib/libc.so.6.
nur eine Ausgabe aus. Ich weiß nicht, ob ich es so nennen würde full fledged program
.
ldd
auf .so ausführen und sehen, welche anderen Bibliotheken verwendet werden. Static meldet sich mit der Meldung, dass es sich nicht um eine dynamische Bibliothek handelt.