* Philipp Thomas schrieb am 01.Sep.2002:
B.Brodesser@t-online.de (Bernd Brodesser) [27 Aug 2002 19:38:32]:
/usr/lib/libmenu.so -> libmenu.so.5 /usr/lib/libmenu.so.4 -> libmenu.so.4.2 /usr/lib/libmenu.so.4.2 /usr/lib/libmenu.so.5 -> libmenu.so.5.2 /usr/lib/libmenu.so.5.2
Wenn ein Programm libmenu.so oder libmenu.so.5 verlangt, so wird libmenu.so.5.2 genommen, wenn es libmenu.so.4 verlangt, so wird libmenu.so.4.2 genommen. Richtig? Hört sich doch recht sinnvoll an, wo tauchen denn da Probleme auf? Wenn ein Programm explizit libmenu.so.5.1 verlangt, oder so? Aber gehört ein solches Programm nicht abgewatscht?
Wenn eine dynamische Bibliothek erstellt wird, kann man dem Linker angeben, welchen internen Namen (der sog. Soname) die Bibliothek haben soll. In den allermeisten Fällen ist dies lib<name>.so.<Hauptversion>. Wird nun ein Programm gegen diese Bibliothek gelinkt, wird dieser Soname im Programm eingetragen. Wird dieses Programm ausgeführt, sucht der dynamische Linker nach einer Bibliothek mit diesem Namen. Über den Symlink libname.so.<hauptversion> -> libname.so.<hauptversion>.<minorversion> findet er sie dann auch.
Die Frage ist, was passiert, wenn ein Programm gegen libname.so.<hauptversion>.<minorversion> gelinkt ist, der Anwender aber libname.so.<hauptversion>.<andereminorversion> hat. Funktioniert es dann trotzdem? Und was ist, wenn er eine höhere hauptversion hat? Und was nimmt ./configure, wenn man selbst kompeliert?
Die lib<name>.so Dateien werden i.d.R. ausschliesslich vom statischen Linker zum Erstellen des Programmes benötigt.
Du meinst lib<name>.a so steht für shered object, a für archiv. Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht wiederstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9