Statisches vs. dynamisches Linken: Unterschiede im Überblick
Linken verbindet Ihren kompilierten Code mit dem Bibliothekscode, den er verwendet. Beim statischen Linken wird der benötigte Bibliothekscode zur Build-Zeit in die ausführbare Datei kopiert, sodass das Programm eigenständig ist. Beim dynamischen Linken vermerkt die ausführbare Datei nur, welche gemeinsam genutzten Bibliotheken sie braucht, und das Betriebssystem lädt sie beim Programmstart, sodass viele Programme eine Kopie gemeinsam nutzen können. Statisch ist einfacher zu verteilen, dynamisch spart Speicher und erleichtert Updates.
| Aspekt | Statisches Linken | Dynamisches Linken |
|---|---|---|
| Zeitpunkt | Zur Build-Zeit: Der Bibliothekscode wird in die ausführbare Datei kopiert | Beim Laden oder zur Laufzeit: Ein dynamischer Linker findet gemeinsam genutzte Bibliotheken (.so, .dll) und bindet sie ein |
| Größe der ausführbaren Datei | Größer | Kleiner |
| Speicherbedarf | Jedes Programm trägt seine eigene Kopie des Bibliothekscodes | Eine Kopie einer Shared Library kann von vielen Prozessen gemeinsam genutzt werden |
| Updates und Sicherheitsfixes | Das Programm muss neu gebaut und neu verteilt werden | Die Bibliothek wird einmal aktualisiert; Programme profitieren ohne Neubau (sofern die Schnittstelle kompatibel bleibt) |
| Startzeit | Etwas schneller | Etwas langsamer: Symbole müssen aufgelöst werden (oft lazy) |
| Deployment | Eigenständig: läuft, ohne dass die Bibliotheken installiert sein müssen | Benötigt die richtigen Bibliotheksversionen auf dem Zielsystem, sonst startet das Programm nicht |
| Laufzeitkosten | Ermöglicht Whole-Program-Optimierung und direkte Aufrufe | Geringer Mehraufwand durch indirekte Aufrufe über GOT und PLT |
| Versionsprobleme | Keine zur Laufzeit | Mögliche Unstimmigkeiten zwischen Programm und installierter Bibliothek |
| Typische Einsatzgebiete | Embedded-Firmware, Einzeldatei-Tools, minimale Container | Die meisten Programme auf Allzweck-Betriebssystemen, Plug-ins, Systembibliotheken wie libc |
Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.