Nehmen wir an, wir sprechen über libtest
. Wenn Sie sich umschauen, sehen Sie libtest.so
, was ein Link zu libtest.so.1
ist , die wiederum auf libtest.so.1.5
verweist .
Eine ausführbare Datei mit libtest
wird gegen libtest.so
verlinken das ist libtest.so.1
in diesem Fall (wird in die ausführbare Datei geschrieben, siehe ldd(1)
). Wenn sich Ihre Distribution ändert libtest
um Fehler zu beheben, könnte die neue Version libtest.so.1.6
geben (und nach Update libtest.so.1
Links darauf, laufende Programme verwenden weiterhin libtest.so.1.5
bis sie aussteigen). Solange keine ABI-Änderungen vorgenommen werden, funktioniert alles einwandfrei. Und dass es keine API-Änderungen gibt, wird durch die unveränderte Versionsnummer 1 signalisiert.
Sagen wir mal die besetzte libtest
Biber kommen mit einer neuen, glänzenden, von Grund auf neu geschriebenen Bibliothek mit geändertem ABI. Als sich die ABI geändert hat, ändern sie die Hauptversionsnummer auf 2. Sie installieren diese und jetzt haben Sie die Kette libtest.so --> libtest.so.2 --> libtest.so.2.1
. Beachten Sie, dass Sie jetzt beide Versionen 1 und 2 installiert haben. Ihre früheren Programme funktionieren immer noch einwandfrei, wenn sie libtest.so.1
verwenden , aber wenn Sie ein neues Programm kompilieren, nimmt der Compiler (eigentlich der Linker) libtest.so
auf und damit die ausführbare Datei auf den neuen libtest.so.2.1
verweisen (es sei denn, Sie werden ausdrücklich aufgefordert, die alte Version zu verwenden).
Beachten Sie, dass die so-Versionsnummern keine Beziehung zu den Versionsnummern des Quellcodes haben müssen; Die Major-Nummer ist die ABI-Version, die Minor-Nummer ist optional und kann verwendet werden, um Revisionen zu verfolgen. Hier (Fedora 20) verwende ich also systemd-libs-208-15.fc20.x86_64
, die libsystemd-daemon.so.0.0.10
bereitstellt .
Dies sind verschiedene Versionen derselben Bibliothek.
Normalerweise möchten Sie die neueste stabile Version der Bibliothek, also verknüpfen Sie mit x.so, das mit dieser neuesten Version verknüpft ist. Wenn eine neue Version verfügbar wird, z. B. x.so.2, können Sie Ihr gesamtes System dazu bringen, sie zu verwenden, indem Sie x.so mit x.so.2 verlinken
Manchmal möchten Sie auf eine alte Version verlinken - zum Beispiel, wenn Ihr Programm auf eine behobene Eigenart angewiesen ist oder die neueste Version einen Fehler eingeführt hat. Manchmal möchten Sie auf eine neue experimentelle Version verlinken – zum Beispiel, wenn Sie sie testen oder wenn sie einen Fehler in der aktuellen Version behebt. In diesem Fall würden Sie direkt auf die nummerierte Version verlinken - hoffentlich als vorübergehende Maßnahme.