.so
i file sono librerie dinamiche . Il suffisso sta per "oggetto condiviso", poiché tutte le applicazioni collegate alla libreria utilizzano lo stesso file, anziché creare una copia nell'eseguibile risultante.
.a
i file sono librerie statiche . Il suffisso sta per "archivio", perché in realtà sono solo un archivio (creato con il ar
comando - un predecessore di tar
quello che ora è solo usato per creare librerie) dei file di oggetti .o originali.
.la
i file sono file di testo utilizzati dal pacchetto "libtools" GNU per descrivere i file che compongono la libreria corrispondente. Puoi trovare maggiori informazioni a riguardo in questa domanda: A cosa servono i file .la di libtool?
Le librerie statiche e dinamiche hanno ciascuna vantaggi e svantaggi.
Pro statico: l'utente utilizza sempre la versione della libreria testata con l'applicazione, quindi non dovrebbero esserci problemi di compatibilità sorprendenti.
Con statico: se un problema è stato risolto in una libreria, è necessario ridistribuire l'applicazione per trarne vantaggio. Tuttavia, a meno che non si tratti di una libreria che gli utenti potrebbero aggiornare da soli, potrebbe essere necessario farlo comunque.
Dynamic pro: il footprint di memoria del processo è inferiore, poiché la memoria utilizzata per la libreria viene ammortizzata tra tutti i processi che utilizzano la libreria.
Dynamic pro: le librerie possono essere caricate su richiesta in fase di esecuzione; questo è utile per i plug-in, quindi non è necessario scegliere i plug-in da utilizzare durante la compilazione e l'installazione del software. Nuovi plugin possono essere aggiunti al volo.
Con dinamico: la libreria potrebbe non esistere nel sistema in cui qualcuno sta tentando di installare l'applicazione o potrebbe avere una versione non compatibile con l'applicazione. Per mitigarlo, potrebbe essere necessario che il pacchetto dell'applicazione includa una copia della libreria, quindi può installarlo se necessario. Questo è spesso mitigato dai gestori di pacchetti, che possono scaricare e installare tutte le dipendenze necessarie.
Le librerie dinamiche sono particolarmente utili per le librerie di sistema, come libc
. Queste librerie spesso devono includere codice dipendente dal sistema operativo e dalla versione specifici, poiché le interfacce del kernel sono cambiate. Se si collega un programma a una libreria di sistema statica, verrà eseguito solo sulla versione del sistema operativo per cui è stata scritta questa versione della libreria. Ma se si utilizza una libreria dinamica, questa raccoglierà automaticamente la libreria installata sul sistema su cui si esegue.