Shared Libraries: DLL und .so
Kurz: Gemeinsam genutzte Bibliotheken (DLL unter Windows, .so unter Linux, .dylib auf macOS) werden erst beim Start oder zur Laufzeit zum Programm geladen und von vielen Programmen geteilt.
Genauer: Das Gegenstück ist statisches Linken, bei dem der Bibliothekscode fest in die ausführbare Datei kopiert wird.
Im Detail
- Vorteile geteilter Bibliotheken: Weniger Speicher (der Code liegt nur einmal im RAM), Fehlerbehebungen ohne Neuübersetzung der Programme, kleinere Dateien.
- Nachteile: „DLL-Hölle” bei Versionskonflikten, Programm startet nicht, wenn die Bibliothek fehlt (
libfoo.so: cannot open shared object file). - Suche: Der dynamische Lader sucht in festgelegten Pfaden. Unter Linux:
LD_LIBRARY_PATH,/etc/ld.so.conf, eingebrannterRPATH. Unter Windows zuerst im Programmordner. - Hilfsmittel:
ldd programm(Linux) zeigt die Abhängigkeiten,otool -Lauf macOS, Dependencies/dumpbinunter Windows. - Statisch gegen dynamisch: Statisch gelinkte Programme (Go, Rust-Standard) sind leicht auszuliefern, dynamische leichter zu aktualisieren.
- Sicherheit: Eine untergeschobene Bibliothek im Suchpfad ist ein bekannter Angriffsweg (DLL-Hijacking).
Siehe auch: Abhängigkeiten und Bibliotheken