Statisch versus dynamisch linken: manieren om bibliotheken te koppelen vergeleken
Linken koppelt gecompileerde code aan de code van de bibliotheken die ze gebruikt. Bij statisch linken wordt de benodigde bibliotheekcode tijdens het bouwen in het uitvoerbare bestand gekopieerd, zodat het programma op zichzelf staat. Bij dynamisch linken noteert het uitvoerbare bestand alleen welke gedeelde bibliotheken nodig zijn en laadt het besturingssysteem die bij het starten van het programma, zodat veel programma's één kopie delen. Statisch is eenvoudiger te distribueren, dynamisch bespaart geheugen en is gemakkelijker bij te werken.
| Kenmerk | Statisch linken | Dynamisch linken |
|---|---|---|
| Wanneer | Tijdens het bouwen. De bibliotheekcode wordt in het uitvoerbare bestand gekopieerd | Bij het laden of tijdens runtime. De dynamische linker zoekt gedeelde bibliotheken (.so, .dll) en mapt ze |
| Grootte van het uitvoerbare bestand | Groot | Klein |
| Geheugengebruik | Elk programma heeft een eigen kopie van de bibliotheekcode | Eén kopie van de gedeelde bibliotheek kan door veel processen worden gedeeld |
| Updates en beveiligingsfixes | Het programma moet opnieuw worden gebouwd en gedistribueerd | Eén update van de bibliotheek werkt door zonder opnieuw te bouwen (mits de interface compatibel is) |
| Opstarttijd | Iets sneller | Iets langzamer. Symbolen moeten worden opgelost (vaak uitgesteld) |
| Distributie | Op zichzelf staand. Werkt ook als de bibliotheek niet is geïnstalleerd | Het doelsysteem heeft de juiste versie van de bibliotheek nodig. Zonder start het programma niet |
| Kosten tijdens runtime | Optimalisatie van het hele programma en directe aanroepen zijn mogelijk | Indirecte aanroepen via GOT en PLT geven een kleine overhead |
| Versieproblemen | Geen tijdens runtime | Een mismatch tussen het programma en de geïnstalleerde bibliotheek is mogelijk |
| Belangrijkste toepassingen | Embedded firmware, tools uit één bestand, minimale containers | De meeste programma's op algemene besturingssystemen, plug-ins, systeembibliotheken zoals libc |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.