Was ist der Unterschied zwischen statischen und gemeinsam genutzten Bibliotheken?
Ich verwende Eclipse und es gibt mehrere Projekttypen, darunter Static Libraries und Shared Libraries? Hat die eine einen Vorteil gegenüber der anderen?
Was ist der Unterschied zwischen statischen und gemeinsam genutzten Bibliotheken?
Ich verwende Eclipse und es gibt mehrere Projekttypen, darunter Static Libraries und Shared Libraries? Hat die eine einen Vorteil gegenüber der anderen?
Gemeinsam genutzte Bibliotheken sind .so (oder in Windows .dll, oder in OS X .dylib) Dateien. Der gesamte Code, der sich auf die Bibliothek bezieht, befindet sich in dieser Datei und wird von Programmen, die sie zur Laufzeit verwenden, referenziert. Ein Programm, das eine gemeinsam genutzte Bibliothek verwendet, verweist nur auf den Code, den es in der gemeinsam genutzten Bibliothek verwendet.
Statische Bibliotheken sind .a (oder in Windows .lib) Dateien. Der gesamte Code, der sich auf die Bibliothek bezieht, befindet sich in dieser Datei und wird zur Kompilierungszeit direkt mit dem Programm verknüpft. Ein Programm, das eine statische Bibliothek verwendet, nimmt Kopien des Codes, den es verwendet, aus der statischen Bibliothek und macht ihn zum Bestandteil des Programms. [Windows verfügt auch über .lib-Dateien, die zum Verweisen auf .dll-Dateien verwendet werden, aber sie funktionieren auf die gleiche Weise wie die erste Datei].
Jede Methode hat ihre Vor- und Nachteile:
Gemeinsam genutzte Bibliotheken reduzieren die Menge an Code, die in jedem Programm, das die Bibliothek nutzt, dupliziert wird, und halten die Binärdateien klein. Außerdem können Sie das gemeinsam genutzte Objekt durch ein funktional gleichwertiges ersetzen, das jedoch zusätzliche Leistungsvorteile bietet, ohne dass das Programm, das es nutzt, neu kompiliert werden muss. Gemeinsam genutzte Bibliotheken verursachen jedoch geringe zusätzliche Kosten für die Ausführung der Funktionen sowie Kosten für das Laden während der Laufzeit, da alle Symbole in der Bibliothek mit den von ihnen verwendeten Objekten verbunden werden müssen. Außerdem können gemeinsam genutzte Bibliotheken zur Laufzeit in eine Anwendung geladen werden, was der allgemeine Mechanismus für die Implementierung binärer Plug-in-Systeme ist.
Statische Bibliotheken erhöhen die Gesamtgröße der Binärdatei, aber es bedeutet, dass Sie keine Kopie der verwendeten Bibliothek mit sich führen müssen. Da der Code zur Kompilierzeit eingebunden wird, entstehen keine zusätzlichen Kosten für das Laden zur Laufzeit. Der Code ist einfach da.
Ich persönlich bevorzuge gemeinsam genutzte Bibliotheken, verwende aber statische Bibliotheken, wenn ich sicherstellen muss, dass die Binärdatei nicht viele externe Abhängigkeiten hat, die möglicherweise schwer zu erfüllen sind, wie z. B. bestimmte Versionen der C++-Standardbibliothek oder bestimmte Versionen der Boost C++-Bibliothek.
Eine statische Bibliothek ist wie ein Buchladen, und eine gemeinsam genutzte Bibliothek ist wie... eine Bibliothek. Bei einer statischen Bibliothek erhalten Sie Ihr eigenes Exemplar des Buches/der Funktion, das Sie mit nach Hause nehmen können; bei einer gemeinsam genutzten Bibliothek gehen Sie und alle anderen in die Bibliothek, um das gleiche Buch/die gleiche Funktion zu nutzen. Jeder, der die (gemeinsam genutzte) Bibliothek nutzen möchte, muss also wissen, wo sie sich befindet, denn man muss das Buch/die Funktion "holen". Bei einer statischen Bibliothek gehört das Buch/die Funktion Ihnen, und Sie bewahren es/sie in Ihrem Haus/Programm auf, und wenn Sie es/sie einmal haben, ist es Ihnen egal, wo oder wann Sie es/sie bekommen haben.
Bei einer statischen Bibliothek wird der Code vom Linker aus der Bibliothek extrahiert und zur Erstellung der endgültigen ausführbaren Datei verwendet, wenn Sie Ihre Anwendung kompilieren/erstellen. Die endgültige ausführbare Datei hat zur Laufzeit keine Abhängigkeiten von der Bibliothek
Bei einer gemeinsam genutzten Bibliothek prüft der Compiler/Linker, ob die Namen, mit denen Sie verlinken, in der Bibliothek vorhanden sind, wenn die Anwendung erstellt wird, aber er überträgt ihren Code nicht in die Anwendung. Zur Laufzeit muss die gemeinsam genutzte Bibliothek verfügbar sein.
Die Programmiersprache C selbst hat kein Konzept von statischen oder gemeinsam genutzten Bibliotheken - sie sind eine reine Implementierungsfunktion.
Ich persönlich ziehe es vor, statische Bibliotheken zu verwenden, da dies die Softwareverteilung einfacher macht. Dies ist jedoch eine Meinung, für die in der Vergangenheit viel (bildliches) Blut vergossen wurde.
Statische Bibliotheken werden als Teil einer Anwendung kompiliert, während gemeinsam genutzte Bibliotheken nicht kompiliert werden. Wenn Sie eine Anwendung vertreiben, die von gemeinsam genutzten Bibliotheken abhängt, müssen die Bibliotheken, z. B. dlls unter MS Windows, installiert werden.
Der Vorteil statischer Bibliotheken besteht darin, dass für den Benutzer, der die Anwendung ausführt, keine Abhängigkeiten erforderlich sind - er muss z. B. seine DLL oder was auch immer nicht aktualisieren. Der Nachteil ist, dass Ihre Anwendung größer ist, weil Sie sie mit allen benötigten Bibliotheken ausliefern.
Gemeinsam genutzte Bibliotheken führen nicht nur zu kleineren Anwendungen, sondern bieten dem Benutzer auch die Möglichkeit, seine eigene, vielleicht bessere Version der Bibliotheken zu verwenden, anstatt sich auf eine zu verlassen, die Teil der Anwendung ist
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
4 Stimmen
Wikipedia hat eine gute Beschreibung die Unterscheidung zwischen statischen, dynamischen und gemeinsam genutzten Bibliotheken.