Perché convertire SO in A?
Gli sviluppatori sostituiscono un file .so condiviso con un file .a statico per produrre un binario autonomo che non dipenda dalla presenza del file .so al momento dell'esecuzione - utile quando si distribuisce su macchine dove la libreria potrebbe non essere installata. Un file .a è un archivio in formato ar di file oggetto compilati, mentre un file .so è un ELF shared object completamente collegato; entrambi sono costruiti dallo stesso sorgente in fasi diverse.
Come convertire SO in A
ar (binutils) OPEN-SOURCE
Compila i file sorgente in file oggetto (gcc -c -o foo.o foo.c), quindi esegui ar rcs libfoo.a *.o per raggrupparli in un archivio statico .a.
GCC / Clang OPEN-SOURCE
Esegui ./configure --enable-static && make nella directory sorgente della libreria per compilare il file .a insieme o al posto del file .so.
apt / dnf / pacman FREE
Installa il pacchetto -dev o -static della libreria (es. apt install libfoo-dev) per ottenere il file .a precompilato senza compilare dai sorgenti; gli archivi statici sono solitamente collocati in /usr/lib/.
Informazioni su questi formati
Un file .so è una libreria di oggetti condivisi su Linux e Unix - l'equivalente Linux di un .dll di Windows. I programmi lo caricano automaticamente all'avvio; non si apre mai direttamente.…
Apri dettagli .SO →Un file .a è una libreria statica utilizzata su Unix, Linux e macOS. Si tratta di un archivio in formato ar di file oggetto compilati che il linker copia nel programma al momento della…
Apri dettagli .A →Qualità e a cosa prestare attenzione
- Un file
.soutilizza codice indipendente dalla posizione (compilato con-fPIC); mescolare file oggetto PIC in un file.acollegato a un eseguibile non-PIE può talvolta causare avvisi del linker ma solitamente funziona. - I numeri di versione nei nomi dei file
.so(es.libssl.so.3.0.2) non hanno equivalenti nei file.a- le librerie statiche non portano un SONAME. - Se è disponibile solo il file
.sofinito senza sorgenti o pacchetti, non esiste un convertitore binario - è necessario ottenere o compilare la libreria statistica dai sorgenti.
Domande frequenti
Posso estrarre i file oggetto da un file `.so` come faccio con un file `.a`?
.so; ar x funziona sugli archivi .a, non sui file .so.Perché usare un file `.a` invece di un file `.so`?
.so non è installato, il che semplifica la distribuzione in ambienti minimi o isolati.Dove finisce il file `.a` statico dopo l'installazione di un pacchetto `-dev`?
/usr/lib/x86_64-linux-gnu/libfoo.a su Debian/Ubuntu, o nel percorso di libreria equivalente su altre distribuzioni.