Die Kurzversion ist, dass Sie dies über den Sonamen der Bibliothek tun. Lesen Sie Kapitel 3 unter http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html sowie Kapitel 3.3 ABI-Versionierung unter http://www.akkadia.org/drepper/dsohowto.pdf
Linux verwendet die folgende Strategie – Sie (der Systembetreuer) stellen symbolische Links von einer „spezifischen“ gemeinsam genutzten Bibliotheksdatei bereit, wie hier:
lrwxrwxrwx 1 root root 16 2011-09-22 14:36 libieee1284.so -> libieee1284.so.3
lrwxrwxrwx 1 root root 20 2011-09-22 14:36 libieee1284.so.3 -> libieee1284.so.3.2.2
-rw-r--r-- 1 root root 46576 2011-07-27 13:08 libieee1284.so.3.2.2
Auf diese Weise können Entwickler entweder gegen -lieee1284 (beliebige Version ABI) oder libieee1284.so.3 oder sogar mit der spezifischen Release- und Patch-Version (3.2.2) verlinken
Der beste Weg, dies zu handhaben, ist die Verwendung von libtool, das die Versionierung für Sie übernimmt.
Im Wesentlichen sind Versionsinformationen nicht (oder nicht primär, weiß ich nicht) in der Bibliothek selbst codiert, sondern in ihrem Dateinamen. Versionsnummern werden normalerweise im Drei-Punkte-Format angegeben, wobei die Hauptnummer für jede Unterbrechung der ABI-Abwärtskompatibilität zunimmt, die mittlere für Unterbrechungen der ABI-Aufwärtskompatibilität und die untergeordnete für Patches, die die ABI nicht geändert haben.
Wie qdot angemerkt hat, stellen symbolische Links im lib-Verzeichnis die wesentliche Versionierung bereit. Es gibt einen Symlink ohne Versionsnummer (libfoo.so) für die aktuell installierten Entwicklungsheader, einen Symlink mit einer Hauptnummer für jede installierte Hauptversion (libfoo.so.1) und eine echte Datei mit der vollständigen Versionsnummer. Normalerweise werden Programme so gelinkt, dass sie zur Laufzeit libfoo.so.1 verwenden, sodass mehrere Hauptversionen koexistieren können.