Entwerfen von dynamischen Bibliotheken
Ein wichtiger Grundsatz beim Entwurf von dynamischen Bibliotheken ist, dass diese immer
abwaertskompatibel sein sollten. Das bedeutet, dass ein Programm, das mit einer aelteren Version
dieser dynamischen Bibliothek gelinkt wurde, auch mit der neuen Version weiterhin lauffaehig sein
sollte. Dieser Grundsatz muss nur dann nicht eingehalten werden, wenn eine voellig neue Version
(major version) zu einer dynamischen Bibliotheken entwickelt wird.
Jede dynamische Bibliothek hat einen speziellen Nahem, den sogenannten soname, der dyn
eigentlichen Namen der Bibliothek, sowie die Versionsnummer beinhaltet. Solange dynamische
Bibliotheken abwaertskompatibel sind, also ihre Schnittstellen sich nicht aendern, sollte sich nur
eine der Nummern (minor number) hinter der Hauptversionsnummer aendern.
Als Beispiel kann man die C-Bibliothek von Linux nehmen, die Abwaertskompatiblitaet fuer alle
Unterversionen mit der gleichen Hauptversionsnummer garantiert. Da z. B. alle C-Bibliotheken mit der
Hauptnummer 6 abwaerskompatibel sind, benutzen sie alle den gleichen soname (libc.so.6), der
lediglich ein symbolischer Link auf die eigentliche, aktuelle dynamische Bibliothek ist:
1 $ ls -l /lib/libc.so.6
2 lrwxrwxrwx 1 root root 13 2004-09-03 17:36 /lib/libc.so.6 -> libc-2.3.2.so
Das Programm ldconfig sucht alle dynamischen Bibliotheken, die in bestimmten Directories
liegen und erzeugt dann bei Bedarf einen symbolischen Link auf die jeweilige Version. ldconfigu
untersucht standardmaessig immer die beiden Directories /lib und /usr/lib. Daneben
untersucht es noch die Dateien der Directories, die auf der Kommandozeile beim Aufruf des Kommandos
angegeben werden und die Directories, deren Namen sich in der Datei /etc/ld.so.conf befinden.
Linkt man nun ein C-Programm, so wird der Linker immer nach einer Datei mit dem Namen
/usr/lib/libc.so suchen, die ein symbolischer Link auf die gerade aktuelle dynamische
C-Bibliothek ist.
Um sich alle durch ldconfig eingerichteten symbolischen links anzeigen zu lassen, muss man nur
ldconfig -p aufrufen. Benutzer, die eigene dynamische Bibliothekeb entwerfen wollen,
sollten wissen, was zu beachten ist, damit eine neue dynamische Bibliothek abwaertskompatibel
bleibt. Es gibt drei Arten von Aenderungen an einer dynamischen Bibliothek, die diese inkompatibel
zu vorherigen Versionen werden laesst:
- Das Aendern oder Entfernen von Funktionsschnittstellen, was ueblicherweise die von
aussen aufrufbaren Funktionen sind.
- Das Aendern eines Funktionscodes in der Form, dass diese Funktion sich nicht mehr so
verhaelt, wie es in der urspruenglichen Spezifikation festgelegt ist.
- Das Aendern von Datenstrukturen, die nach aussen sichtbar sind. Hierzu zaehlt jedoch
nicht das Anfuegen zusaetzlicher Komponenten am Ende von Strukturen, die innerhalb der
Bibliothek allokiert werden.
Dagegen ziehen die folgenden Modifikationen an einer dynamischen Bibliothek keine
Inkompatiblitaet nach sich:
- Hinzufuegen neuer Funktionen mit anderen Namen, um die Funtionalitaet einer
existierenden dynamischen Bibliothek zu erweitern.
- Hinzufuegen weiterer Komponenten am Ende von Strukturen, die innerhalb der Bibliothek
allokiert werden. Die gilt jedoch nicht fuer Datenstrukturen, die nicht innerhalb der
Bibliothek allokiert werden, da dann Programme, die mit frueheren Versionen gelinkt wurden,
nicht genuegend Speicherplatz allokiert haben. Ebenso sollten keine Datenstrukturen
erweitert werden, die in Arrays verwendet werden.
Zurueck || Index || Vor