Was ist der Unterschied zwischen .so-, .la- und .a-Bibliotheksdateien?


230

Ich weiß, dass eine .soDatei eine Art dynamische Bibliothek ist (viele Threads können solche Bibliotheken gemeinsam nutzen, sodass nicht mehr als eine Kopie davon im Speicher vorhanden sein muss). Aber was ist der Unterschied zwischen.a und .la? Sind das alles statische Bibliotheken?

Wenn dynamische Bibliotheken große Vorteile gegenüber statischen haben, warum gibt es dann immer noch viele statische Bibliotheken?

Ich möchte auch wissen, welcher Mechanismus zum Laden von Bibliotheken (beide Arten) zugrunde liegt und wie ein Code in einer Bibliothek aufgerufen wird, wenn er irgendwo verwendet wird. Welchen Teil des Kernels soll ich studieren? Und welchen zugehörigen Linux-Befehl / Dienstprogramm sollte ich kennen, um zu wissen, wie ein Prozess ausgeführt wird? (Ich kenne den ldBefehl nur bis jetzt)

Wann sollte ich versuchen, Code in .sooder zu integrieren .a? Welches ist besser?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so

Antworten:


306

.soDateien 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.

.aDateien sind statische Bibliotheken . Das Suffix steht für "Archiv", weil es sich eigentlich nur um ein Archiv handelt (erstellt mit dem arBefehl - einem Vorgänger vontar , der jetzt nur zum Erstellen von Bibliotheken verwendet wird) der ursprünglichen .o-Objektdateien handelt.

.laDateien 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.


1
@Barmar, Sie sagen also, dass die Vorteile statischer Bibliotheken die Vorteile dynamischer Bibliotheken überwiegen?
Pacerier

4
@ Pacerier Ich weiß nicht, woher du das hast.
Barmar

13
Das ist eine bedeutungslose Frage. Das Gewicht der Vor- und Nachteile hängt von den Umständen ab, es gibt keine universelle Antwort. Es scheint, als hätten Sie eine Agenda und versuchen mich zu ködern.
Barmar

3
@Barmar, Nein, ich bin unschuldig. Nur ein Neugieriger.
Pacerier

11
Ein weiterer Faktor ist die Lizenzierung - LGPL erfordert eine dynamische Verknüpfung in einem kommerziellen Kontext, dh dort, wo Sie Ihre Quelle nicht verbreiten möchten.
Sam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.