.so
Dateien sind dynamische Bibliotheken . Das Suffix steht für "Shared Object", da alle mit der Bibliothek verknüpften Anwendungen dieselbe Datei verwenden, anstatt eine Kopie in der resultierenden ausführbaren Datei zu erstellen.
.a
Dateien sind statische Bibliotheken . Das Suffix steht für "Archiv", weil es sich eigentlich nur um ein Archiv handelt (erstellt mit dem ar
Befehl - einem Vorgänger vontar
, der jetzt nur zum Erstellen von Bibliotheken verwendet wird) der ursprünglichen .o-Objektdateien handelt.
.la
Dateien sind Textdateien, die vom GNU-Paket "libtools" verwendet werden , um die Dateien zu beschreiben, aus denen die entsprechende Bibliothek besteht. Weitere Informationen dazu finden Sie in der folgenden Frage: Wozu dient die .la-Datei von libtool?
Statische und dynamische Bibliotheken haben jeweils Vor- und Nachteile.
Static Pro: Der Benutzer verwendet immer die Version der Bibliothek, die Sie mit Ihrer Anwendung getestet haben, sodass keine überraschenden Kompatibilitätsprobleme auftreten sollten.
Statische Konsequenz: Wenn ein Problem in einer Bibliothek behoben ist, müssen Sie Ihre Anwendung neu verteilen, um sie nutzen zu können. Sofern es sich nicht um eine Bibliothek handelt, die Benutzer wahrscheinlich selbst aktualisieren, müssen Sie dies möglicherweise trotzdem tun.
Dynamic Pro: Der Speicherbedarf Ihres Prozesses ist geringer, da der für die Bibliothek verwendete Speicher auf alle Prozesse verteilt wird, die die Bibliothek verwenden.
Dynamic Pro: Bibliotheken können bei Bedarf zur Laufzeit geladen werden. Dies ist gut für Plugins, sodass Sie nicht die Plugins auswählen müssen, die beim Kompilieren und Installieren der Software verwendet werden sollen. Neue Plugins können im laufenden Betrieb hinzugefügt werden.
Dynamische Con: Die Bibliothek ist möglicherweise nicht auf dem System vorhanden, auf dem jemand versucht, die Anwendung zu installieren, oder es gibt eine Version, die nicht mit der Anwendung kompatibel ist. Um dies zu vermeiden, muss das Anwendungspaket möglicherweise eine Kopie der Bibliothek enthalten, damit es bei Bedarf installiert werden kann. Dies wird auch häufig durch Paketmanager gemildert, die alle erforderlichen Abhängigkeiten herunterladen und installieren können.
Dynamische Bibliotheken sind besonders nützlich für Systembibliotheken wie libc
. Diese Bibliotheken müssen häufig Code enthalten, der vom jeweiligen Betriebssystem und der jeweiligen Version abhängt, da sich die Kernelschnittstellen geändert haben. Wenn Sie ein Programm mit einer statischen Systembibliothek verknüpfen, wird es nur auf der Version des Betriebssystems ausgeführt, für die diese Bibliotheksversion geschrieben wurde. Wenn Sie jedoch eine dynamische Bibliothek verwenden, wird automatisch die Bibliothek abgerufen, die auf dem System installiert ist, auf dem Sie ausgeführt werden.