Beim statischen Linken werden alle Bibliotheken, die Ihr Programm benötigt, direkt in die endgültige ausführbare Datei kopiert. Dies geschieht direkt am Ende der Kompilierung und wird von einem Linker durchgeführt.
Zunächst kombiniert der Linker den Programmcode mit allen erforderlichen Bibliotheken. Sobald dies abgeschlossen ist, wird alles in eine ausführbare Datei kompiliert. Wenn das Programm installiert wird, werden alle erforderlichen Bibliotheken in den Speicher geladen.
An dieser Stelle kommt der Begriff „statisch“ ins Spiel. Da nun alles zusammen ausgeliefert wird, müssen Sie diesen ganzen Prozess erneut durchführen, wenn Änderungen an den externen Bibliotheken vorgenommen werden.
Das hört sich nach einem langwierigen Prozess an, aber die Verwendung von statischem Linking hat mehrere Vorteile.
Aber statisches Linken hat auch seine Nachteile.
Da Sie alle Bibliotheken in einer einzigen ausführbaren Datei kompilieren und ausliefern, kann das Programm viel größer sein und viele Ressourcen verbrauchen. Dazu gehören Cache, RAM und Festplattenplatz.
Beim dynamischen Linking werden externe oder gemeinsam genutzte Bibliotheken direkt zur Laufzeit namentlich in die ausführbare Datei kopiert. Erst dann werden alle erforderlichen Bibliotheken vom Betriebssystem in den Speicher geladen.
Beim dynamischen Linking findet das Betriebssystem die externen Bibliotheken, wenn das Programm ausgeführt wird. Sollten sich Änderungen an den nun in den Speicher geladenen Bibliotheken ergeben, muss die ausführbare Datei nicht neu kompiliert und als neue ausführbare Datei ausgeliefert werden.
Dynamisches Linking hat eine Reihe von Vorteilen.
Auch wenn es insgesamt effizienter klingt, birgt die dynamische Verknüpfung auch eine Reihe von Nachteilen.
Da Sie nun die Vor- und Nachteile beider Methoden kennen, wollen wir diese beiden Linking-Methoden miteinander vergleichen.
Beim statischen Linking werden die Bibliotheken als Teil des Build-Prozesses in Ihre Anwendung oder Ihr Programm kompiliert. Bei der dynamischen Verknüpfung wartet das Betriebssystem ab und lädt die gemeinsam genutzten Bibliotheken erst dann in den Speicher, wenn die Anwendung gestartet wird.
Diese beiden Linking-Prozesse unterscheiden sich in der Art und Weise, wie sie erstellt, ausgeliefert und verwaltet werden. Der Unterschied zwischen statischem und dynamischem Linking ist jedoch nicht nur eine Frage der Vorlieben oder der Benutzererfahrung. Die Entscheidung hängt von den jeweiligen Anwendungsfällen ab, z. B. davon, was Sie entwickeln und wo Sie es bereitstellen werden.
Manchmal wird Ihnen die Entscheidung für das eine oder das andere aus der Hand genommen.
Aber wie entscheiden Sie sich, wenn die Entscheidung Ihnen überlassen bleibt?
Eine weitere Überlegung betrifft den Umfang und die Häufigkeit der von Ihnen erwarteten Aktualisierungen. Die Auslieferung von Fehlerbehebungen und Updates ist bei statisch gelinkten Programmen weit weniger effizient. Sie müssten jedes Mal die gesamte ausführbare Datei neu kompilieren und versenden.
Bei der dynamischen Verknüpfung laden die Benutzer bei jedem Programmstart die neueste Version, da die neueste Version der Bibliotheken aufgerufen wird. Sie können also die erforderlichen Änderungen vornehmen, ohne alles neu kompilieren zu müssen.
Statisches und dynamisches Linking sind zwei grundverschiedene Wege, ein Programm zu kompilieren und auszuliefern. Jede hat ihre eigenen Vorzüge und Vorteile in Bezug auf die Ladezeit, die Gesamtleistung und die Einfachheit der Aktualisierung.
Welche Methode Sie wählen, hängt von Ihrem Anwendungsfall und dem Ort ab, an dem Sie Ihre Anwendung bereitstellen möchten. Bevor Sie sich entscheiden, sollten Sie die Auswirkungen auf die verschiedenen Betriebssysteme, die Benutzerfreundlichkeit und die Möglichkeit, Patches und Updates schnell bereitzustellen, sorgfältig abwägen.