Statisch oder dynamisch?
Was sind Bibliotheken?
Alles im Kopf
Es würde zu lange dauern, wenn alle Programme bei jedem Zugriff auf eine Bibliothek das gesamte Dateisystem durchsuchen müssten. Deshalb enthält die Datei /etc/ld.so.cache eine Liste der bekannten Bibliotheken mitsamt ihrem Speicherort auf der Festplatte.
Nach der Installation neuer Bibliotheken muss dieser Zwischenspeicher aufgefrischt werden, damit die Programme die neuen Libraries finden. Ein Paketmanager erledigt dies selbständig, bei manueller Installation dient dazu der Befehl ldconfig. Er durchsucht die Verzeichnisse /lib/ und /usr/lib/ sowie deren Unterverzeichnisse.
Zum Auffrischen von /etc/ld.so.cache benötigt man Root-Rechte. Der Parameter -v zeigt während dieses Vorgangs alle gefundenen Bibliotheken an, ansonsten wird der Cache stillschweigend aktualisiert.
Weitere zu durchsuchende Bibliothekspfade gibt Root in der Konfigurationsdatei /etc/ld.so.conf an. Alternativ speichert man in der Umgebungsvariable LD_LIBRARY_PATH analog zur PATH-Variable eine durch Doppelpunkte getrennte Liste zu durchsuchender Pfade.
Mittels der Umgebungsvariablen LD_PRELOAD oder der Datei /etc/ld.so.preload überschreibt man Funktionen einer Shared Library. Die Funktionen der hier aufgeführten Bibliotheksdateien haben Priorität und eignen sich somit, um einzelne neue Features einzubringen.
Pakete im Eigenbau
In den Bibliotheken steckt meist das Hauptproblem beim Kompilieren von Programmen, die nur im Quellcode vorliegen. Die Installationsanleitung listet üblicherweise die benötigten Programme und Bibliotheken auf. Zum Kompilieren benötigt man die Entwicklervarianten dieser Pakete. Sind sie installiert, überprüft das Kommand ./configure, ob das System entsprechend vorbereitet ist. Gibt ./configure eine Fehlermeldung aus, lässt sich aus ihr entnehmen, woran es hapert. Fehlt ein Paket, wird es nachinstalliert und ./configure erneut gestartet.
Leider enthalten viele Quellpakete unzuverlässige ./configure-Skripte, die nicht alle Mängel erkennen. Sie geben grünes Licht, obwohl möglicherweise eine benötigte Bibliothek fehlt. Dann lässt sich der Kompiliervorgang einleiten, bricht aber mit einer oft wenig aussagekräftigen Fehlermeldung ab.



