Eine .aDatei ist eine statische Bibliothek, während eine .soDatei 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 .
.akann nur während des Kompilierens in ein Programm eingebunden werden. .sokann "importiert" werden, während ein Programm geladen wird.
LawrenceC
2
Wofür steht .a?
hfrmobile
2
@hfrmobile a steht für archive - eine statische Bibliothek ist eine Sammlung von Objektdateien, die mit dem arDienstprogramm erstellt wurden. Weitere Informationen hier
Ajk
28
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.)
Tippfehler. du meinst zu schreiben 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.
Faheem Mitha
1
Es ist ein vollwertiges Programm in dem Sinne, dass es ein Hauptsymbol für exec zu finden hat.
Hack Saw
2
Sie können auch lddauf .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.
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 .quelle
.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 hierAls 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:
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:
(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.)
quelle
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ürdefull 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.