In realtà, è possibile installare più versioni di una libreria condivisa se è eseguita correttamente.
Le librerie condivise sono generalmente denominate come segue:
lib<name>.so.<api-version>.<minor>
Successivamente, ci sono collegamenti simbolici alla libreria con i seguenti nomi:
lib<name>.so
lib<name>.so.<api-version>
Quando un link di sviluppo contro la libreria per produrre un binario, è il nome del file che termina in .soche i reperti linker. In effetti, può esserci solo uno di quelli installati alla volta per ogni dato, <name>ma ciò significa solo che uno sviluppatore non può targetizzare più versioni diverse di una libreria contemporaneamente. Con i gestori di pacchetti, questo .socollegamento simbolico fa parte di un -devpacchetto separato che solo gli sviluppatori devono installare.
Quando il linker trova un file con un nome che termina con .soe l'usa, si guarda dentro quella libreria per un campo chiamato soname . Il soname indica al linker quale nome file incorporare nel file binario risultante e quindi quale nome file verrà cercato in fase di esecuzione. Il soname dovrebbe essere impostato su lib<name>.so.<api-version>.
Pertanto, in fase di esecuzione, il linker dinamico lo cercherà lib<name>.so.<api-version>e lo utilizzerà.
L'intenzione è che:
<minor>gli aggiornamenti non cambiano l'API della libreria e quando <minor>viene passata a una versione successiva, è sicuro lasciare che tutti i binari si aggiornino alla nuova versione. Dal momento che tutti i binari cercano la libreria sotto il lib<name>.so.<api-version>nome, che è un link simbolico all'ultimo installato lib<name>.so.<api-version>.<minor>, ottengono l'aggiornamento.
<api-version>gli aggiornamenti cambiano l'API della libreria e non è sicuro lasciare che le applicazioni binarie esistenti utilizzino la nuova versione. Nel caso in cui <api-version>sia cambiato, poiché quelle applicazioni stanno cercando il nome lib<name>.so.<api-version>ma con un valore diverso per <api-version>, non preleveranno la nuova versione.
I gestori pacchetti spesso non impacchettano più di una versione della stessa libreria all'interno della stessa versione di distribuzione poiché l'intera distribuzione, inclusi tutti i file binari che utilizzano la libreria, viene generalmente compilata per utilizzare una versione coerente di ogni libreria prima che la distribuzione sia rilasciato. Assicurarsi che tutto sia coerente e che tutto in una distribuzione sia compatibile con tutto il resto è una parte importante del carico di lavoro per i distributori.
Ma puoi facilmente finire con più versioni di una libreria se hai aggiornato il tuo sistema da una versione della tua distrazione a un'altra e hai ancora dei pacchetti più vecchi che richiedono versioni di librerie più vecchie. Esempio: