Verwaltung von gemeinsam genutzten Programmbibliotheken

Beschreibung: Die Prüfungskandidaten sollten in der Lage sein, Shared Libraries, die von ausführbaren Programmen benötigt werden, zu bestimmen und nötigenfalls zu installieren. Sie sollten ebenfalls in der Lage sein, anzugeben wo sich die Systembibliotheken befinden.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

ldd
ldconfig
/etc/ld.so.conf
LD_LIBRARY_PATH

Prinzip Shared Libraries

Wie bereits im Kapitel 1.102.3 beschrieben gibt es zwei Möglichkeiten, wie man ein Programm erstellt. Zum einen ist es möglich, sämtliche von einem Programm benötigten Bibliotheken statisch in das Programm einzubinden. Damit werden die Programme aber sehr groß und hat einen, sehr großen Nachteil: jedes Programm lädt die benötigten Libraries in den Arbeitsspeicher und so werden bestimmte Libraries mehrfach in den Arbeitsspeicher geladen.

Wenn Programm dynamisch gelinkt sind, so werden diese Bibliotheken separat in den Arbeitsspeicher geladen. Wird ein anderes Programm gestartet, welches dieselbe Bibliothek benötigt, so kann das Programm auf diese zugreifen und muss die Bibliothek nicht erneut laden. Somit wird kein unnötiger Speicherplatz verbraucht.

Der Dynamische Linker ld.so

Es muss also ein Programm geben, dass beim Start eines Programms überprüft, welche Libraries benötigt werden, ob diese bereits geladen wurden, um diese ggfs. zu laden. Ein solches Programm nennt man einen dynamischen Linker und in der Linux-Welt ist dies ld.so.

Man kann es sich etwa so vorstellen: Das Programm, das gestartet werden soll, gibt den "Auftrag" an ld.so weiter. ld.so überprüft nun, welche Libraries benötigt werden und schaut in der ld.so.cache-Datei nach, wo sich diese befinden. Wenn die benötigten Libraries noch nicht geladen werden, wird dies getan, um zu guter letzt das Programm zu starten.

LD_LIBRARY_PATH = Ist eine Umgebungsvariable, welche eine Liste von Verzeichnissen der Libraries ist. Sollte man ein neues Verzeichnis anlegen, welches bestimmte Libraries enthält, so muss man dieses Verzeichnis dort angeben.

/etc/ld.so.cache = Beinhaltet eine Liste mit Angaben, welche Libraries auf dem System vorhanden sind und wo sich diese befinden. Dieser Cache muss mit ldconfig aktuell gehalten werden.

/etc/ld.so.conf = In dieser Datei kann man Verzeichnisse zu den Libraries festlegen.

ldd - Welches Programm braucht welche Library?

Mit ldd kann man herausfinden, welches Programm welche Libraries benötigt.

# ldd /bin/ls

librt.so.1 => /lib/librt.so.1 (0x40022000)
libc.so.6 => /lib/libc.so.6 (0x40033000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4014e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Hier sieht man, dass die Libraries librt.so.1, libc.so.6 und libpthread.so.0 benötigt werden. In Klammern stehen die Fundorte der Libraries auf dem System.

ldconfig - ld.so.cache aktualisieren

ldconfig aktualisiert den Library Cache (/etc/ld.so.cache) und erstellt automatisch die notwendigen symbolischen Links auf Libraries. Erst stehen die Libraries in der Datei /etc/ld.so.cache und sind somit dem Linker/Loader bekannt.