.SO

File SO

Shared Object (ELF shared library)
Fai una domanda
RISPOSTA RAPIDA

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. Se un'app fallisce con l'errore «cannot open shared object file», installa la libreria mancante tramite il gestore pacchetti della tua distribuzione (apt, dnf, pacman) invece di scaricare il file da un sito web.

Sviluppatore: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Categoria: File di sistema Standard aperto MIME: application/x-sharedlib
SI APRE SU macOS Linux
Correlati: .NOMEDIA · .DLL · .TMP · .LNK

In questa pagina

19k+ estensioni indicizzate
Ultima revisione Jun 17, 2026

Non sei sicuro di cosa sia il tuo file?

Trascina qualsiasi file nel nostro identificatore - leggiamo solo i primi byte per dare un nome al formato.

Identifica un file

Che cos'è il formato di file SO?

Un file .so contiene una libreria condivisa caricata dinamicamente per applicazioni Unix e Linux. .so è un file binario utilizzato per fornire l'accesso a codice e dati condivisi che uno o più programmi possono utilizzare all'avvio. L'estensione sta per Shared Object, a indicare il fatto che una volta caricata la libreria in memoria, i suoi oggetti - funzioni e dati - possono essere accessibili da più processi simultaneamente. Il tipo MIME registrato per i file .so è application/x-sharedlib.

Le librerie .so sono oggetti ELF (acronimo di Executable and Linkable Format), il formato binario standard utilizzato su Linux e molti sistemi Unix-like per eseguibili, oggetti compilati, librerie condivise e core dump. Ogni file ELF valido - inclusi i file .so - inizia con il numero magico di quattro byte \x7FELF all'offset 0. La struttura del file comprende:

  • Intestazione ELF - definisce architettura, endianness e bitness (32-bit o 64-bit), oltre al numero di voci nelle tabelle dei segmenti e delle sezioni,
  • Tabella delle intestazioni del programma - descrive i segmenti di memoria utilizzati al momento del caricamento,
  • Tabella delle intestazioni di sezione - descrive le singole sezioni utilizzate dal linker e dal debugger,
  • Dati referenziati da tali intestazioni.

I segmenti vengono utilizzati durante l'esecuzione del programma e possono essere composti da più sezioni; le sezioni vengono utilizzate durante l'operazione di collegamento (linking). I file .so possono essere collegati a un programma in fase di compilazione o caricati a runtime tramite dlopen().

I nomi dei file .so seguono una convenzione di denominazione in cui il nome della libreria è preceduto dal prefisso lib - ad esempio, una libreria chiamata abc avrà il nome file libabc.so, e il flag -labc viene utilizzato per il collegamento ad essa. Il suffisso .so può essere seguito da un numero di versione, come libabc.so.3 per il file della versione principale o libabc.so.3.1.2 per una build con versione completa. In pratica, libabc.so è spesso solo un collegamento simbolico che punta al file con la versione reale, e libabc.so.3 può essere a sua volta un symlink alla release compatibile più recente. La versione memorizzata nella voce dinamica DT_SONAME è quella che il linker di runtime ld.so registra e controlla. Alcune librerie di sistema di basso livello - come lo stesso ld.so - non seguono la convenzione del prefisso lib.

Su Windows il concetto equivalente è un file .DLL; su macOS è un file .dylib. Le alternative statiche su Linux sono archiviate in file .a.

Sicurezza e incolumità

RISCHIO: MEDIUM

Un .so è codice nativo eseguibile che gira all'interno di qualsiasi processo lo carichi, quindi una libreria condivisa malevola può fare tutto ciò che il programma ospite può fare. I rischi reali: (1) dirottamento della libreria (library hijacking) - un .so contraffatto posizionato dove il caricatore cerca per primo, o l'abuso di LD_PRELOAD/LD_LIBRARY_PATH, può iniettare codice in un programma legittimo; (2) scaricare singoli file .so da siti web casuali per correggere un errore - questi potrebbero essere malevoli o incompatibili con l'ABI e possono rompere o compromettere il sistema. Installa sempre le librerie dai repository dei pacchetti firmati della tua distribuzione. L'eliminazione dei file .so di sistema (in /lib, /usr/lib) può rendere il sistema operativo o le app non avviabili.

Dettagli del formato

in sintesi
NOME COMPLETOShared Object (ELF shared library)
SVILUPPATOREUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)dal ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
TIPO MIMEapplication/x-sharedlib
TIPOLibreria condivisa ELF (Executable and Linkable Format) - codice macchina nativo compilato
STANDARDAperto · royalty-free
MAGIC BYTES · FIRMA DEL FILE
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
I primi quattro byte sono 0x7F seguiti da «ELF». Il byte 4 (EI_CLASS) è 1 per 32-bit / 2 per 64-bit; il byte 5 (EI_DATA) indica l'endianness; il campo e_type (offset 16) è ET_DYN (0x0003) per un oggetto condiviso. La stessa intestazione ELF è utilizzata dagli eseguibili Linux e dai file oggetto, quindi la designazione .so deriva da e_type + ruolo del file, non da un numero magico separato.

Programmi che aprono file SO

macOS1 app
binutils / file / Ghidra Open-source macOS usa .dylib nativamente, ma i file .so di Linux possono essere ispezionati con cross-binutils o Ghidra. 'file lib.so' conferma che si tratta di un oggetto condiviso ELF.
Linux4 apps
System dynamic linker (ld.so) + package manager Integrato Non si «apre» un .so - il caricatore lo usa automaticamente. Per correggere un file mancante, installa il pacchetto che lo fornisce: 'apt install libfoo' / 'dnf install foo' / 'pacman -S foo'. Usa 'ldconfig' per aggiornare la cache.
binutils (nm / objdump / readelf) Open-source Ispeziona un .so dalla riga di comando: 'nm -D lib.so' elenca i simboli, 'readelf -d lib.so' mostra il SONAME/dipendenze, 'objdump -d lib.so' disassembla.
ldd Integrato 'ldd ./programma' o 'ldd lib.so' elenca quali oggetti condivisi sono necessari e se ciascuno viene risolto - la prima cosa da eseguire per un errore di '.so mancante'.
Ghidra Open-source Importa il .so per il disassemblaggio/decompilazione completa quando si effettua il reverse-engineering di codice nativo (funziona anche su Windows/macOS).

Dettagli tecnici

specifiche approfondite
Tipo MIMEapplication/x-sharedlib
Magic bytes7F 45 4C 46 ("\x7FELF") all'offset 0 del file - magic identico a tutti i file ELF; il campo e_type distingue gli oggetti condivisi
Valore ELF e_typeET_DYN (0x0003) - distingue un oggetto condiviso da un eseguibile (ET_EXEC = 0x0002) o da un oggetto rilocabile (ET_REL = 0x0001)
BitnessByte EI_CLASS all'offset 4: 1 = 32-bit (Elf32), 2 = 64-bit (Elf64); entrambe le varianti sono ampiamente diffuse su Linux
EndiannessByte EI_DATA all'offset 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); specifico per l'architettura
Codice indipendente dalla posizioneDeve essere compilato con -fPIC in modo che la libreria possa essere mappata a qualsiasi indirizzo virtuale senza conflitti di rilocazione tra i processi
Tabella dei simboli dinamiciLa sezione .dynsym esporta e importa simboli visibili a runtime; .dynstr contiene le stringhe dei nomi corrispondenti
PLT / GOTLa Procedure Linkage Table e la Global Offset Table consentono la risoluzione dei simboli lazy (predefinita) o eager (-z now) al momento del caricamento
soname (DT_SONAME)Nome canonico della libreria incorporato nella sezione dinamica ELF; ld.so registra questo nome quando un programma viene collegato, consentendo il tracciamento della versione ABI indipendentemente dal nome del file
Versioning dei simboliLe sezioni .gnu.version e .gnu.version_r consentono più versioni di simboli all'interno di un singolo file, permettendo l'evoluzione dell'ABI retrocompatibile
Linker di runtimeCaricato da ld.so / ld-linux-x86-64.so.2; percorso di ricerca controllato da LD_LIBRARY_PATH, DT_RUNPATH, o /etc/ld.so.conf + cache ldconfig
Convenzione di denominazionelib<nome>.so[.major[.minor.patch]]; libabc.so è tipicamente un symlink di sviluppo → libabc.so.3 → libabc.so.3.1.2
Percorso di ricerca incorporatoLe voci dinamiche DT_RPATH o DT_RUNPATH scrivono i percorsi di ricerca delle librerie nel file al momento del collegamento; DT_RUNPATH è preferito in quanto può essere sovrascritto da LD_LIBRARY_PATH
Strumenti di ispezionereadelf -a, objdump -d, nm --dynamic (binutils); ldd per l'elenco delle dipendenze; il comando file identifica il tipo ELF e l'architettura
RilasciatoELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Standard aperto · royalty-free
Specificarefspecs.linuxfoundation.org

Conversioni SO

Domande e risposte della community

chiesto dagli utenti
Fai una domanda veloce
Ottieni aiuto da persone che lavorano con i file SO. Sii specifico - includi il tuo sistema e la versione del software.
Nessun account necessario · risposte solitamente entro un giorno

Ancora nessuna domanda - sii il primo a chiedere informazioni sui file SO.

Domande frequenti

Come posso risolvere l'errore 'error while loading shared libraries: libXXX.so' su Linux?
Installa il pacchetto che fornisce la libreria con il tuo gestore pacchetti (es. 'sudo apt install libxxx' su Debian/Ubuntu, 'sudo dnf install xxx' su Fedora). Cerca con 'apt-file search libxxx.so' o tramite la ricerca pacchetti della tua distro. Non scaricare il .so da un sito web.
Cos'è un file .so?
Un oggetto condiviso - una libreria collegata dinamicamente di codice compilato su Linux/Unix, l'equivalente di un .dll di Windows. I programmi lo caricano a runtime in modo da poter condividere codice comune invece di includerne ciascuno una copia.
Un .so è uguale a una DLL di Windows?
Funzionalmente sì - entrambi sono librerie condivise dinamiche caricate a runtime. Ma non sono intercambiabili: .so è codice ELF per Linux/Unix, .dll è codice PE per Windows. Non è possibile eseguire l'uno sul sistema operativo dell'altro.
Posso aprire o eseguire direttamente un file .so?
No - non ha un punto di ingresso e viene caricato da altri programmi, non avviato da solo. Per esaminarne l'interno, usa strumenti di sviluppo: 'nm -D', 'readelf -d', 'objdump -d', o decompila con Ghidra.
Perché i file .so hanno numeri come libssl.so.3?
Quelli sono numeri di versione. libssl.so è solitamente una catena di symlink che punta a un file di versione specifico (libssl.so.3 -> libssl.so.3.0.2). Il SONAME incorporato permette al caricatore di scegliere una versione compatibile, così i vecchi programmi continuano a funzionare quando una libreria si aggiorna.
Posso eliminare i file .so per liberare spazio?
Non quelli nelle directory delle librerie di sistema - i programmi e il sistema operativo dipendono da essi, e rimuoverli causa gli errori «cannot open shared object file». Rimuovi le librerie solo disinstallando il relativo pacchetto tramite il gestore pacchetti.

Riferimenti

1GNU Binutils - nm/objdump/readelf documentationwww.gnu.org
2Linux Foundation - ELF (Executable and Linkable Format) specificationrefspecs.linuxfoundation.org

Continua a esplorare

nel database

Migliori estensioni della settimana

1.AQQAQQ Instant Messenger File
2.MDMarkdown Document
3.CRDOWNLOADChrome Partial Download File
4.BINCD/DVD Disc Image (BIN/CUE)
5.PARTPartial Download File
6.NOMEDIAAndroid No-Media Marker File
7.RPMSGRestricted Permission Message
8.EXEWindows Executable (Portable Executable)
9.AVIFAV1 Image File Format (AVIF)
10.SB3Scratch 3.0 Project File

Estensioni correlate

.NOMEDIAAndroid No-Media Marker File
.DLLDynamic Link Library
.TMPTemporary File
.LNKWindows Shell Link (Shortcut)
.PKGmacOS Installer Package
.ETLEvent Trace Log

Strumenti file gratuiti

Un identificatore di file e convertitore di immagini nel browser - tutto viene eseguito sul tuo dispositivo.

Apri la cassetta degli attrezzi

Sfoglia le estensioni dei file A-Z