![]() |
|
||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
von Marcel Hilzinger
Eine der am häufigsten gestellten Fragen in Internet-Foren und auf Mailing-Listen lautet: "Wo, bitte, finde ich die Datei libyxz.so.1?". Meistens fängt der Name der vermissten Datei mit lib an, ein Zeichen dafür, dass es sich bei dem gesuchten Objekt um eine Shared Library -- eine Systembibliothek -- handelt.
Shared Libraries stellen unter Linux wie Windows eine zentrale Komponente des Systems dar. Ohne die richtigen Bibliotheken verweigern Programme ihren Dienst, in ganz seltenen Fällen kommt es auch zu Abstürzen. Unter Windows sind die meisten Bibliotheken in den Ordern C:\Windows\system und C:\Windows\system32 zu finden. Ist Ihr Explorer so konfiguriert, dass er auch die Dateiendungen anzeigt, erkennen Sie die Bibliotheken an der Endung .DLL (Dynamic Link Library). Bei Linux lohnt sich ein Blick in die Verzeichnisse /lib/ und /usr/lib/ sowie in die entsprechenden Unterverzeichnisse.
In der realen Welt beherbergen Bibliotheken Bücher, letztere wiederum Wissen. Um etwas zu wissen, müssen Sie nicht bei Null anfangen und selber forschen, sondern Sie leihen sich aus der Bibliothek das entsprechende Buch und bauen Ihr Wissen darauf auf. Auf die selbe Weise gehen auch Programmierer vor: Bei der Entwicklung eines neuen Programmes leihen sie sich Funktionen wie Datei öffnen, Speicher auf die Festplatte schreiben, Musik abspielen von bestehenden Teilprogrammen -- den Systembibliotheken -- aus. Da gleichzeitig mehrere Programme diese Bausteine benutzen können, nennt man die Systembibliotheken auch Shared Libraries -- gemeinsam benutzte Bibliotheken.
Eine Linux-Installation beinhaltet in der Regel Hunderte von Shared Libriaries, Windows sogar über Tausend. Starten Sie doch einfach den Paketmanager Ihrer Distribution und suchen Sie nach dem Stichwort Library.
Die wichtigste unter den Shared Libraries ist die GNU C Library, kurz Glibc. Sie beinhaltet zum Beispiel Funktionen, um Dateien zu lesen oder zu schreiben. Ohne diese Bibliothek lässt sich nicht mit Linux arbeiten. Da fast jedes Linux-Programm auf die Glibc-Bibliothek aufbaut ist es wichtig, dass sie sich nicht jeden Tag ändert. Die aktuelle Version ist denn auch schon seit einiger Zeit die Glibc 2.2.3. Größere Updates gibt es in der Regel nur alle paar Jahre.
Bekannt dürfte Ihnen aus den letzten EasyLinux-Ausgaben auch die Bibliothek libdvdcss sein. Sie stellt Multimedia-Playern die Funktionalität zum Abspielen verschlüsselter DVD-Filme bereit. Ähnliche Bibliotheken existieren für das Betrachten von Grafiken und das Abspielen von Videos sowie Musikstücken.
Mit der ständigen Entwicklung von Linux verändern sich auch die Shared Libraries. Im Normalfall ergänzen dabei einfach die Entwickler die bestehende Bibliothek um neue Funktionen. Das ist wie bei der Neuauflage eines Buches, die einen Anhang mit dem neuesten Wissensstand enthält. Da die alten Informationen in unveränderter Weise im Buch stehen, finden sich alte und neue Leser sofort zurecht. In seltenen Fällen ist ein Buch derart veraltet, dass der Autor es von Grund auf neu schreibt. Hier entscheidet dann die Bibliotheksführung eventuell, das alte Buch nicht mehr zur Verfügung zu stellen, und ersetzt es durch das neue. Sie müssen Ihr Buch dann in einer anderen Bibliothek suchen und finden es unter Umständen nur noch in einem Antiquariat.
Zu diesem Problem kann es auch bei Systembibliotheken kommen. Entscheidet zum Beispiel ein Team von Programmierern, die Bibliotheken zum Abspielen von Audio-CDs tiefgreifend zu ändern, müssen auch die Entwickler von CD-Playern wie Kscd, Xmms oder Kaffeine ihre Software ändern. Möchten Sie weiterhin die alte Version des Multimedia-Players benutzen, laufen eventuell andere Programme nicht entsprechend. Im Unterschied zu Windows bietet Linux zum Glück die Möglichkeit, gleichzeitig verschiedene Versionen von Bibliotheken zu installieren, trotzdem sind auch hier Probleme nicht ganz zu vermeiden.
Welche Bibliotheken ein Programm benötigt, zeigt der Befehl ldd /pfad/zum/programm. Der Aufruf von ldd /bin/mount zeigt zum Beispiel, von welchen Systembibliotheken das Programm mount abhängig ist. Die Ausgabe sehen Sie in Kasten "Ausgabe von ldd /bin/mount". Einige Programme wie OpenOffice, der Browser Firefox oder der Mail-Client Thunderbird verzichten ganz auf den Einsatz gemeinsamer Bibliotheken. Das Programm läuft dann unabhängig davon, welche Bibliotheken auf einer Distribution installiert sind, benötigt aber deutlich mehr Speicherplatz. Auch der Befehl ldd selbst ist ein so genanntes statisch gelinktes Programm. Rufen Sie ldd /usr/bin/ldd auf, erhalten Sie deshalb die Meldung: not a dynamic executable.
| Ausgabe von ldd /bin/mount |
kim:/lib # ldd /bin/mount
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/tls/libc.so.6 (0x40056000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
|
In der Praxis gibt es unter Linux drei typische Problemfälle mit Bibliotheken:
Das erste Problem tritt zwar am häufigsten auf, es lässt sich aber auch am einfachsten lösen. Beklagt sich zum Beispiel ein Programm darüber, dass es libdv.so.4 nicht findet, überprüfen Sie zunächst mit dem Paket-Manager Ihrer Distribution, ob sich die Bibliothek auf den Installationsmedien befindet. Unter Suse Linux existiert dazu ein separates Hilfsprogramm pin. Um nach der erwähnten Bibliothek zu suchen, geben Sie folgenden Befehl auf der Kommandozeile ein:
pin libdv.so.4
Zeigt Pin keine Treffer an, lassen Sie die Zahl am Ende des Bibliotheknamens weg. Die Zahl steht für die Versionsnummer; ohne ihre Angabe findet Pin auch neuere und ältere Versionen der Shared Library. Unter Suse Linux 9.1 ergibt pin libdv.so.4 zunächst keine Treffer. Ohne Versionsnummer zeigt das Programm als Treffer das RPM-Paket libdv-0.101-43.i586.rpm an (Abbildung 1). In diesem Paket befindet sich libdv.so.2. Um an die gesuchte Bibliothek zu gelangen, müssen Sie also eine neuere Version des Paketes libdv installieren. Dazu besuchen Sie entweder die Homepage des Programmes (steht auch in der Ausgabe von Pin) oder suchen im Internet nach dem Namen der Bibliothek und Ihrer Distribution.
Um unter Mandrake Linux nach einer Bibliothek zu suchen, starten Sie den Mandrake-Paket-Manager mit dem Befehl rpmdrake und wählen anschließend unter Finden: den Eintrag in Dateinamen aus. Jetzt geben Sie den Namen der gesuchten Bibliothek ins Feld ein und klicken auf Suchen. Der Paket-Manager listet anschließend unter Suchergebnis die gefunden RPM-Pakete auf. Auch hier empfiehlt es sich, eine Suche ohne Versionsnummer zu starten, falls das Programm keinen Treffer anzeigt. Unter Fedora Core existiert leider kein grafisches Tool, auf der Kommandozeile helfen aber folgende Befehle weiter:
rpm -q --whatprovides libdv.so.4 yum search libdv.so
Der erste Befehl findet nur Pakete, wenn Sie die Versionsnummer angeben und das entsprechende Paket bereits installiert ist. Mit dem zweiten Befehl suchen Sie nach der Bibliothek auch in Paketen, die noch nicht installiert sind. Dazu dürfen Sie die Versionsnummer nicht angeben.
Benötigt ein Programm zum Beispiel die Bibliothek libdv.so.4, auf Ihrem System ist aber nur die Datei libdv.so.2 installiert (Problem 2), müssen Sie das entsprechende Paket auffrischen. Dies führt unter Umständen zu einer Kette weiterer Abhängigkeiten, so dass es für Anfänger oft das Einfachste ist, die gesamte Distribution zu aktualisieren. Hier geht Probieren über Studieren: Lässt sich das Paket ohne weiteres mit dem distributionseigenen Paket-Manager installieren, haben Sie gewonnen. Listet das Installationsprogramm hingegen haufenweise unerfüllte Abhängigkeiten auf, ist einiges an Wissen, Geduld und Gespür nötig. Zur Not können Sie auch den Trick mit dem Link versuchen, wie in Kasten "Der Trick mit dem Link" beschrieben.
| Der Trick mit dem Link |
|
Öffnen Sie zum Beispiel das Library-Verzeichnis /usr/lib in Konqueror, fällt Ihnen vielleicht auf, dass pro Bibliotheksname mehrere Einträge existieren. Von diesen Einträgen ist in der Regel die größte Datei die eigentliche Bibliothek, die übrigen Einträge sind Verknüpfungen darauf. Verknüpfungen erkennen Sie in Konqueror daran, dass das Symbol mit einem kleinen Pfeil gekennzeichnet ist. Suchen Sie zum Beispiel unter Fedora Core im erwähnten Verzeichnis nach Dateinamen, die mit libdv beginnen, findet Konqueror die Dateien libdv.so.4 und libdv.so.4.0.1. Erstere ist die Verknüpfung, letztere die eigentliche Bibliothek. Zweck dieser Verknüpfungen ist es, Update-Probleme zu verhindern. Nach einer Aktualisierung der Libdv-Bibliothek auf Version 4.0.2 muss einfach der Link weiterhin libdv.so.4 heißen: Die Programme merken dann nichts vom Update. Ein Link hilft oft auch bei Abwärts-Kompatibilität. Sucht ein Programm auf Ihrem System zum Beispiel nach der Datei libdv.so.2, legen Sie einfach einen Link mit diesem Namen auf die vorhandene Bibliothek libdv.so.4.0.1 an. Dazu öffnen Sie ein Terminalfenster und geben als Benutzer root im Verzeichnis /usr/lib folgenden Befehl ein: ln -s libdv.so.4.0.1 libdv.so.2 In den meisten Fällen funktioniert danach das Programm wieder tadellos. |
Ab und zu bemängelt ein Programm auch nach der Installation einer Shared Library immer noch das Fehlen der Bibliothek. In diesem Fall muss die Datenbank aller Systembibliotheken aufgefrischt werden. Da jedes Programm zum Start zahlreiche Bibliotheken benötigt, führt Linux in der Datei /etc/ld.so.cache eine kleine Datenbank mit Name, Version und Ort der einzelnen Bibliotheken. Diese Datenbank aktualisiert das System normalerweise beim Systemstart. Unter Suse Linux macht auch Yast nach der Installation von RPM-Paketen ein Update des Cache-Verzeichnisses. Sie erkennen das am Eintrag Linker-Cache wird eingreichtet beim Start von SuSEconfig.
Die Datenbank lässt sich auch im laufenden System aktualisieren. Geben Sie dazu einfach als Benutzer root den Befehl ldconfig ein. Abhängig davon, wieviel sich in Ihrem System seit dem letzten Aufruf von ldconfig geändert hat, dauert die Aktualisierung des Library-Cache von einigen Sekunden bis zu einigen Minuten.
Findet Ihr Programm die gesuchte Bibliothek auch nach dem Aufruf von ldconfig nicht, sucht es vermutlich am falschen Ort. Wo das System nach Libraries suchen soll, ist in der Datei /etc/ld.so.conf festgelegt. Die Datei hält fest, welche Verzeichnisse außer /lib/ und /usr/lib/ noch Systembibliotheken enthalten. Haben Sie zum Beispiel den Multimedia-Player Xine nach /opt installiert, müssen Sie das Verzeichnis /opt/lib/xine in die Datei /etc/ld.so.conf eintragen und anschließend ldconfig aufrufen -- fertig. (mhi)
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite |
Datenschutz |
© 2012 Linux New Media AG |
Last modified: 2007-04-05 11:10
[Linux-Magazin]
[LinuxUser]
[Linux-Community]
[Admin-Magazin]
[Ubuntu User]
[Smart Developer]
[Linux Events]
[Linux Magazine]
[Ubuntu User]
[Admin Magazine]
[Smart Developer]
[Linux Magazine Poland]
[Linux Community Poland]
[Linux Magazine Brasil]
[Linux Magazine Spain]
[Linux Technical Review]