Was ist der Unterschied zwischen einer .a und einer .so Datei?

Soweit ich weiß, handelt es sich um Bibliotheken, aber was ist der Unterschied zwischen den beiden?

Kommentare

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 es full 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.