EMZETT.
Login

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, eingebrannter RPATH. Unter Windows zuerst im Programmordner.
  • Hilfsmittel: ldd programm (Linux) zeigt die Abhängigkeiten, otool -L auf macOS, Dependencies/dumpbin unter 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