Wie erstelle ich eine dynamische Bibliothek?

1.) Bennenung

Die Bennennung muss einigen Konventionen entsprechen.
Als Beispiel möchte ich die Bibliothek bibel bringen:
libbibel.so.1
ist die Hauptversion nr 1
Die unterversionen wie 1.1 müssen kompatibel zu der Haupt-
version bleiben! So dürfen keine Schnittstellen verändert
werden und alle Funktionen / Klassen müssen auch nachher
genau die gleiche Funktionalität (ausser Bugs) haben.

Erlaubt sind:
- veränderung interner Datenstrukturen
- neue Funktionen hinzugeben

Bei neuer Hauptversionsnummer kann man beliebige Änderungen
machen.

2.) Compilieren einer dynamische Bibliothek

Es muss zuerst eine Objektdatei erzeugt werden. Diese
muss aber positions unabhängig sein!
bei gcc heisst die Option -fPIC (Position Independent Code)

bei unserem Beispiel wäre es:
gcc -fPIC -Wall -c bibel.c
-Wall ... schaltet Warnungen ein
-c    ... generiere Objektdatei

3.) Generieren der dynamischen Bibliothek

Nun muss die .so Datei, die dyn. Bibliothek erzeugt werden.
Ich möchte dazu gleich das Beispiel bringen:

gcc -shared -Wl,-soname,libbibel.so.1 -o libfehler.so.1.0 fehler.o -lc

-shared ... bewirkt, dass eine dyn. Bibliothek erzeugt wird
-Wl	... diese Optionen werden nach dem Umwandeln von Beistriche
		zu Spaces dem Linker übergeben! Hauptversionsnummer
		muss dabei sein!
-o	... Output, so soll die Datei heißen
-lc	... Die c-Bibliothek (Achtung wenn c++ verwendet!)

4.) Installieren der Bibliothek

Für diesen Vorgang muss man root sein.
Kopieren sie die Datei nach /usr/lib bzw. /lib (Wenn für Bootvorgang
benötigt)

# cp libbibel.so.1 /usr/lib

Machen sie einen Symbolischen Link von der aktuellen Version zu
einem Namen ohne Versionsnummer.

# cd /usr/lib
# ln -s libbibel.so.1 libbibel.so

Geschafft! Sie müssen nur noch ldconfig ausführen

# ldconfig

Wollen sie die Bibliothek nicht installieren (wenn sie z.B. kein root
Zugang zu diesem System haben) können sie die Enviromentvariable
LD_LIBRARY_PATH setzen, dann wird in diesem Pfad nach Bibliotheken
gesucht.

5.) Notizen

Eventuell sollten sie noch die Headerdateien global verfügbar machen.
(in den Ordner /usr/includes hineinkopieren)

Wollen sie ihre Bibliothek verwenden, einfach -lbibel beim Kompilieren
hinzugeben

bsp:
gcc -Wall -c meinProgramm.c
gcc -o meinProgramm meinProgramm.o -lbibel

Dieses Dokument wurde unter der GPL Lizens veröffentlicht.

Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif