Diciamo che stiamo parlando di libtest
. Se ti guardi intorno, vedrai libtest.so
, che è un collegamento a libtest.so.1
, che a sua volta si collega a libtest.so.1.5
.
Un eseguibile usando libtest
collegherà contro libtest.so
che è libtest.so.1
in questo caso (questo è scritto nell'eseguibile, vedi ldd(1)
). Se la tua distribuzione cambia libtest
per correggere i bug, la nuova versione potrebbe dare libtest.so.1.6
(e dopo l'aggiornamento libtest.so.1
link ad esso, i programmi in esecuzione continueranno a utilizzare libtest.so.1.5
finché non escono). Finché non vengono apportate modifiche all'ABI, tutto funziona correttamente. E il fatto che non ci siano modifiche all'API è segnalato dal numero di versione 1 invariato.
Diciamo l'occupato libtest
i castori escogitano una nuova libreria, tutta lucida, riscritta da zero, con ABI modificato. Quando l'ABI è cambiato, cambiano il numero di versione principale in 2. Installi quello e ora hai la catena libtest.so --> libtest.so.2 --> libtest.so.2.1
. Nota che ora hai entrambe le versioni 1 e 2 installate. I tuoi programmi precedenti funzionano ancora bene, usando libtest.so.1
, ma se compili un nuovo programma il compilatore (linker, in realtà) prenderà libtest.so
e quindi puntare l'eseguibile al nuovo libtest.so.2.1
(a meno che non venga specificamente richiesto di utilizzare la vecchia versione, cioè).
Si noti che i numeri di versione so non devono avere alcuna relazione con i numeri di versione del codice sorgente; il numero maggiore è la versione ABI, il numero minore è facoltativo e può essere utilizzato per tenere traccia delle revisioni. Quindi qui (Fedora 20) sto usando systemd-libs-208-15.fc20.x86_64
, che fornisce libsystemd-daemon.so.0.0.10
.
Queste sono versioni diverse della stessa libreria.
Normalmente, vuoi la versione stabile più recente della libreria, quindi ti colleghi a x.so, che è collegato a quella versione più recente. Quando diventa disponibile una nuova versione, diciamo x.so.2, puoi fare in modo che tutto il tuo sistema la usi, collegando x.so a x.so.2
A volte vuoi collegarti a una vecchia versione, ad esempio se il tuo programma si basa su una stranezza che è stata corretta o se l'ultima versione ha introdotto un bug. A volte vuoi collegarti a una nuova versione sperimentale, ad esempio se la stai testando o se corregge un bug nella versione corrente. In tal caso ti collegheresti direttamente alla versione numerata, si spera come misura temporanea.