Qual è la differenza tra i file di libreria .so, .la e .a?


230

So che un .sofile è una specie di libreria dinamica (molti thread possono condividere tali librerie, quindi non è necessario averne più di una copia in memoria). Ma qual è la differenza tra .ae .la? Sono tutte librerie statiche?

Se le librerie dinamiche presentano grandi vantaggi rispetto a quelle statiche, perché ci sono ancora molte librerie statiche?

Voglio anche sapere il meccanismo sottostante per caricare le librerie (entrambi i tipi) e come un pezzo di codice in una lib viene invocato quando viene usato da qualche parte. Quale parte del kernel dovrei studiare? E quale comando / utilità Linux correlato dovrei sapere per sapere come è in esecuzione un processo? (Conosco solo il ldcomando ormai)

Quando devo provare a inserire il codice in .soo .a? Qual è il migliore?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so

Risposte:


306

.soi 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.

.ai file sono librerie statiche . Il suffisso sta per "archivio", perché in realtà sono solo un archivio (creato con il arcomando - un predecessore di tarquello che ora è solo usato per creare librerie) dei file di oggetti .o originali.

.lai 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.


1
@Barmar, quindi stai dicendo che i vantaggi delle librerie statiche superano i vantaggi delle librerie dinamiche?
Pacerier,

4
@Pacerier Non so da dove l'hai preso.
Barmar,

13
Questa è una domanda insignificante. Il peso dei pro e dei contro dipende dalle circostanze, non esiste una risposta universale. Sembra che tu abbia un ordine del giorno e stai provando ad attirarmi.
Barmar,

3
@Barmar, No, sono innocente. Solo un curioso.
Pacerier,

11
Un altro fattore è la licenza: LGPL richiede un collegamento dinamico in un contesto commerciale, ovvero dove non si desidera distribuire la propria fonte.
Sam,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.