Library: Unterschied zwischen den Versionen
Robi (Diskussion | Beiträge) (dynamische Loader) |
Robi (Diskussion | Beiträge) (Abhängigkeiten) |
||
Zeile 45: | Zeile 45: | ||
== Welche Library braucht welches Programm == | == Welche Library braucht welches Programm == | ||
+ | |||
+ | Gelegentlich,ist es wichtig herauszufinden welche Libraries ein Programm oder eine andere Library selbst benötigt, oder von welcher sie abhängig ist. | ||
+ | Dieses kann man mit dem Befehl [http://man.splitbrain.org/ldd '''ldd''']. Dazu wird einfach '''ldd''' mit dem vollem Path des Programmes oder der Library aufgerufen. Und in der Ausgabe erscheinen die Abhängigkeiten von den Libraries. | ||
+ | <pre> | ||
+ | robi@LINUX:~> ldd /bin/bash | ||
+ | linux-gate.so.1 => (0xffffe000) | ||
+ | libreadline.so.4 => /lib/libreadline.so.4 (0x4002e000) | ||
+ | libhistory.so.4 => /lib/libhistory.so.4 (0x4005a000) | ||
+ | libncurses.so.5 => /lib/libncurses.so.5 (0x40061000) | ||
+ | libdl.so.2 => /lib/libdl.so.2 (0x400a7000) | ||
+ | libc.so.6 => /lib/tls/libc.so.6 (0x400aa000) | ||
+ | /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) | ||
+ | </pre> | ||
== Libraries manuell installieren und aktualisieren == | == Libraries manuell installieren und aktualisieren == |
Version vom 27. Oktober 2006, 09:24 Uhr
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist. |
--Robi 12:55, 26. Okt 2006 (CEST)
diesen Beitrag bitte mit einarbeiten
http://www.linux-club.de/viewtopic.php?t=70347
Inhaltsverzeichnis
Library
Was ist ein Library
Unter Library (Bibliothek) versteht man eine Sammlung von universell einsetzbaren Softwarebausteinen. Somit muss bei der Entwicklung nicht jede Funktion in jedem Programm wieder neu erfunden oder neu geschrieben werden, sondern man nutzt bei der Erstellung der Software schon fertig erprobte Funktion einer solchen Library. Zur Erstellung neuer Funktionen können somit Librarys mit fundamentalen Funktionen benutzt werden, und mehrere thematisch und logisch zusammenhängende neue Funktionen wiederum zu einer neuen Library zusammengestellt werden. Somit entstehen Hirarchien von Libraries und bei der Programmentwicklung kann man sich auf die Entwicklung des wirklich Neuem oder Einmaligem beschränken.
verschieden Typen von Library
Man unterscheidet :
- Quelltextbibliotheken
enthalten Sammlungen von Wertedefinitionen, Deklarationen, Funktionen, Klassen, generischen Bestandteilen, usw. In diesen Libraries befindet sich Quelltext in irgend einer Programmiersprache. Oftmals werden solche Bibliotheken genutzt um die Schnittstellen und Definitionen für andere Libraries zur Verfügung zu stellen. Solche Librarys werden nur während der Entwicklung und Übersetzung des Quellcodes in den ausführbaren Code benötigt. Zur Ausführung oder während der Laufzeit des fertigen Programmes werden diese Library nicht mehr benötigt.
- Statische Bibliotheken
bestehen schon aus ausführbarem Binärcode. Nach dem Kompiliervorganges des neuen Programmes, werden sie mittels eines so genannten Linker oder Binder mit dem ausführbaren Programm zu einem lauffähigem Programm vereint. Der Linker sucht aus den Bibliotheksdateien die Unterprogramme heraus, für die es im Programm keine Implementierung gibt. Diese werden dann aus den Dateien extrahiert und mit den Funktionen des Programms zu einer einzigen Datei verbunden. Man nennt das statisch gegem die Library linken. Jedes so entstandene Programm und somit auch jeder Prozess der durch das Starten eines solchen Programmes entsteht, hat also Teile der Library "im Bauch". Die Library an sich, wird zur Ausführung des Programmes nicht benötigt. Dieses Verfahren wird wegen des großen Speicherverbrauchs während der Laufzeit der Programme ehr selten angewant.
- Dynamische Bibliotheken
bestehen ebenfalls aus schon ausführbarem Binärcode. Die benötigten Objekte der Library werden aber nicht vom Linker in das neue Programm übernommen, sondern nur die Einsprungsmarke der benötigten Funktionen im Libray wird im Programm hinterlegt. Man spricht hier von dynamisch gegen die Library linken. Dynamische Bibliotheken werden bei Bedarf, also erst bei der Anforderung eines Programmes, komplett in den Arbeitsspeicher geladen und können dort von mehreren Programmen gleichzeitig genutzt werden. Dadurch muss eine Bibliothek, die von mehreren Programmen genutzt wird, nur einmal im Speicher gehalten werden, was einen bedeutenden Vorteil gegenüber statisch verlinkten Programmen bedeutet. Diese Library muss dann aber während des Startens der Programme im Linuxsystem auch verfügbar sein. Da aber mehrere Programme ein Library im Hauptspeicher benutzen können, muss die Verwaltung, das Laden und Entladen dieser Library von Linux selbst übernommen werden, und kann nicht von den Programmen selbst übernommen werden. Diese Funktion, sozusagen der dynamische Linker und Lader oder Library-Loader, erledigt in Linux ein Programm Namens ld.so .
Vor- und Nachteile von dynamischen Library
Neben dem schon angesprochenem Vorteil, daß eine Library im Speicher gleichzeitig von mehreren Programmen und Instanzen dieser Programme genutzt werden kann, was eine sehr effektive Hauptspeicherverwaltung begünstigt, gibt es noch einen riesen Vorteil gegenüber statisch verlinkten Programmen. Im Falle einer notwendigen Änderung innerhalb von Funktionen eines Libraries, muss im System nur diese Library ausgetauscht werden und nicht alle Programme, die gegen diese Library gelinkt sind, neu kompiliert und neu gelinkt werden. Den Vorteilen stehen aber auch einige Nachteile entgegen. Da eine Library zur Ausführung von Programmen oder anderen Libraries in einem System immer vorhanden sein muss, entstehen jede Menge Abhängigkeiten. Sicherlich hat das jeder schon einmal erlebt, und mach einer auch schon daran verzweifelt, die Installation eines neuen Programmes erfordert eine bestimmte Library und will man diese fehlende Library dann installieren, dann fordert diese Installation jetzt erstmal wiederum bestimmte Libraries usw..... Ein zweiter Nachteil wird schnell sichtbar, wenn man bedenkt, dass es nicht immer gelingt, daß neue Versionen einer Library immer 100% kompatibel zu ihrer Vorgängerversion sind. Somit muss man in einem Linuxsystem oftmals mehrere Versionen ein und des selben Library bevorraten, da die einzelnen Programm gegen bestimmte Versionen gelinkt sind und die Abhängigkeiten besagen, es muss mindestens diese Version sein, oder maximal diese Version oder genau diese Version der Library. Siehe auch hier das Problem mit der Standard-Library, die wohl wichtigste Library im System, gegen die alle anderen Libraries und Programme gelinkt sind.
Der dynamische Loader
Der dynamische Linker und Loader ld.so oder als Link darauf auch ld-linux.so ist das Programm in Linux welches die Verwaltung und das Laden der dynamischen Bibliotheken ermöglicht. Damit er selbst funktionieren kann, ist er statisch gegen die libc.so gelinkt. Damit jetzt die Libraries geladen werden können, muss folgendes geklärt sein. Welche Libraries stehen zum laden im System zur Verfügung, in welchen Verzeichnissen liegen diese oder müssen dazu durchsucht werden. Der ld.so hat also eine Konfiguration. Diese befindet sich in der Datei /etc/ld.so.conf und ist einfach aufgebaut. In ihr werden die Verzeichnisse eingetragen, in denen die Libraries zu finden sind. (die beiden Stardard Verzeichnisse /lib und /usr/lib brauchen nicht mit angegeben werden). Daneben gibt es noch einige Variablen, in denen Verzeichnisse für Libraries eingetragen werden können, damit ld.so diese laden kann, das wird aber in aller Regel nur in Ausnahmefällen benötigt, wenn zB eine neue Version eines Library getestet werden soll, anstatt dem, was normal auf dem Rechner installiert ist, siehe dazu die Manpage von ld.so Damit jetzt nicht bei jeder Anforderung eines Programmes das halbe System nach der Library durchsucht werden muss, wird eine Datenbank (cache) geführt, in der die vorhandenen Libraries mit ihrem Path eingetragen sind. Dieser Cache befindet sich in der Datei /etc/ld.so.cache. Das Programm das diesen Cache anlegt, aktualisiert und mit dessen Hilfe man auch den Inhalt anzeigen kann ist ldconfig.
Damit nun eine neu hinzugekommene Library von ld.so automatisch geladen werden kann, muss sie also zuerst einmal mit ldconfig in den cache eingetragen werden. Die Benutzung von ldconfig obliegt nur root. Wird als root der Befehl abgegeben (ohne irgendwelche Optionen) wird anhand der /etc/ld.so.conf die Verzeichnisse nach Librarys durchsucht und in die /etc/ld.so.cache eingetragen. Mit ldconfig -p kann man sich auch den Inhalt der /etc/ld.so.cache in lesbarer Form anzeigen lassen.
Namen und Verzeichnisse der Library
Welche Library braucht welches Programm
Gelegentlich,ist es wichtig herauszufinden welche Libraries ein Programm oder eine andere Library selbst benötigt, oder von welcher sie abhängig ist. Dieses kann man mit dem Befehl ldd. Dazu wird einfach ldd mit dem vollem Path des Programmes oder der Library aufgerufen. Und in der Ausgabe erscheinen die Abhängigkeiten von den Libraries.
robi@LINUX:~> ldd /bin/bash linux-gate.so.1 => (0xffffe000) libreadline.so.4 => /lib/libreadline.so.4 (0x4002e000) libhistory.so.4 => /lib/libhistory.so.4 (0x4005a000) libncurses.so.5 => /lib/libncurses.so.5 (0x40061000) libdl.so.2 => /lib/libdl.so.2 (0x400a7000) libc.so.6 => /lib/tls/libc.so.6 (0x400aa000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Libraries manuell installieren und aktualisieren
weiter Befehle rund um Libraries
--Robi 12:55, 26. Okt 2006 (CEST)