2012-09-06 14 views
14

Ich versuche, eine 3rd-Party-Bibliothek (unter Linux) zu kompilieren und sehen, dass es Dateien erzeugt libsomething.a ich meine andere Bibliotheken habe dieWas ist der Unterschied zwischen .so und .a Dateien?

.so-Datei sind, aber es scheint, dass auch .a Bibliothek geteilt wird und kann genau wie ein .so lib verwendet werden

Also gibt es einen Unterschied zwischen den beiden? oder sie sind nur gleich mit verschiedenen Namenskonventionen.

+2

Was lässt Sie sagen, dass sie auf die gleiche Weise verwendet werden können? –

+0

@CarlNorum, weil es möglich ist, gegen beide Typen zu verknüpfen - nur das Ergebnis wird anders sein. –

+0

@ H2CO3, das ist eine ziemlich schwache Definition von "kann genau so verwendet werden", aber ich werde es kaufen, denke ich ... –

Antwort

17

Aber es scheint, dass auch .a Bibliothek geteilt wird

Nö, es ist eine statische Bibliothek ist.

und kann wie eine .so lib

verwendet werden, wenn Sie es bedeuten Verknüpfung, dann ja. Aber Sie können eine .a-Datei, die Sie mit einer .so-Datei machen könnten, nicht öffnen().

Sie können immer unseren alten Freund Uncle G bitten, Ihre Fragen zu beantworten.

+0

Danke. Hier wurde ich verwirrt. Mein Problem war nicht, sie zu verknüpfen. beide können verknüpft werden. aber ich wollte wissen, ob .a nur dynamisch oder statisch verknüpft werden kann. es ist jetzt klar – rajshenoy

+8

Der Link zu "Onkel G" ist kaputt. – splungebob

18

Eine .a-Datei ist eine statische Bibliothek, während eine .so Datei eine Shared Object dynamische Bibliothek ähnlich ein DLL auf Windows.

A .a Dose enthalten als Teil eines Programms während der Compilation & .so kann importiert, während ein Programm lädt.

15

Wenn Sie mit der *.a verknüpfen, ist der Code aus der Bibliothek in der ausführbaren Datei enthalten und die ausführbare Datei kann ausgeführt werden, ohne dass die Datei *.a vorhanden sein muss. Wenn Sie mit der *.so verknüpfen, ist das nicht der Fall und die Datei *.so muss zur Laufzeit vorhanden sein.

Verwandte Themen