Donnerstag, 23. Juni 2016

102.3 Shared Libaries verwalten

Wichtung: 1

Heinlein:

  • linken bedeutet, dass immer wieder verwendete Routinen in sogenannten Bibliotheken gesammelt werden und diese dann in dem Programm verlinkt werden (Include-Bibliotheken)
  • Zwei Möglichkeiten der Verlinkung:
    • statische Verlinkung: Hier werden die Routinen direkt in den Programmcode übernommen. Heraus kommt ein allein lauffähiges Programm (monolithisches Programm) welches auf den unterschiedlichsten Systemen lauffähig ist
    • dynamische Verlinkung: Die notwendigen Programmroutinen werden nicht direkt eingebunden, sondern es werden nur entsprechende Verweise auf die entsprechenden Bibliotheken eingebunden. Vorteil: Programmcode ist kleiner! Was zusätzlich von Vorteil ist, dass das Betriebssystem diese Bibliotheken einmal in den RAM lädt, wo sie allen Programmen zur Verfügung stehen. Durch den Zugriff auf den RAM werden auch die Zugriffszeiten beschleunigt. Des Weiteren spart es RAM, da die Bibliothek nur einmal geladen wird und nicht für jedes Programm extra.
  • ldd <path/programm>     Ausgabe der benötigten shared libaries des Programms oder anderer shared libaries aus. -> Manpage
  • Im Programmcode ist nur der Name des gelinkten Programmes enthalten, nicht aber sein Pfad, der von System zu System unterschiedlich sein kann
  • Um die Suche bei effizient zu gestalten, beschränkt die Datei /etc/ld.so.conf die Suche auf wenige Verzeichnisse. Um auch diese Zugriffszeit schneller zu gestalten, sorgt der Lauf des Programmes ldconfig dafür, dass alle Bibliotheken in den unter /etc/ls.so.conf enthaltenen Pfaden in einer schnell auslesbaren Binärdatei gesammelt werden. Dort schaut Linux dann nach, wo es die benötigten Bibliotheken laden kann
  • Wurden neue Bibliotheken auf dem System installiert muss ldconfig gestartet werden, damit diese Bibliotheken dem System bekannt gemacht werden können. Im Allgemeinen übernimmt das das Setup-Programm der Distributionen (z.B. SUSEconfig) diese Aufgabe. Installiert man aber von Hand, muss man unbedingt ldconfig von Hand ausführen, damit die /etc/ld.so.conf aktualisiert wird. Sollten die benötigten Bibliotheken nicht in den Standardpfaden abgelegt sein, muss die /etc/ld.so.conf von Hand nachbearbeitet werden.
  • Die Pfade /lib und /usr/lib sind nicht in der /etc/ld.so.conf enthalten, da diese beiden per Default sowieso indexiert werden
  • /etc/ld.so.conf enthält nur einen Verweis auf das Verzeichnis /etc/ld.so.conf.d. In diesem Verzeichnis liegen dann verschiedene Konfigurationsdateien, die die eigentlichen Verweise enthalten. Die Dateien sind allerdings ziemlich leer.
  • ldconfig      erzeugt die benötigten Links und sammelt die notwendigen Bibliotheken, die immer wieder benötigt werden. Die Informationen dafür kommen aus der /etc/ld.so.conf und aus den /lib und /usr/lib Verzeichnissen. -> Manpage
    • ldconfig -p    Ausgabe aller im Cache gespeicherten Libaries
    • ldconfig -n    Verwendet nur die angegebenen Verzeichnisse in /etc/ld.so.conf und nicht die Standardverzeichnisse /lib und /urs/lib
  • /lib/ld.so     runtime linker/loader
  • /etc/ld.so.cache    in diesem File werden alle in den Verzeichnissen gefundenen Bibliotheken aufgelistet
  • Um eigene Bibliotheken testen zu können, übergibt man der Variable LD_LIBRARY_PATH die entsprechenden Pfade, wo die Bilbliotheken zu finden sind. Standardmäßig ist die Variable nicht gesetzt

Keine Kommentare:

Kommentar veröffentlichen