Gli utenti di Linux si imbattono spesso nell'errore di caricamento delle librerie condivise
durante l'esecuzione dei programmi, ed è anche familiare a molti programmatori e a chiunque voglia compilare software sul proprio sistema. Letteralmente significa che c'è un problema durante il caricamento delle librerie condivise.
L'errore"errore durante il caricamento delle librerie condivise
" significa che durante l'esecuzione di un programma o di uno script, il sistema operativo non è riuscito a trovare e caricare una o più librerie necessarie per il funzionamento del programma. Si tratta di un problema comune nei sistemi operativi di tipo UNIX. Quando un programma viene compilato, può fare riferimento a varie librerie esterne che dovrebbero essere disponibili in fase di esecuzione. Se queste librerie mancano o non sono disponibili, si verifica un errore durante il caricamento delle librerie condivise.
Anche se non compilate i vostri programmi, potreste vedere questo errore: directory_name: cannot open shared object file: No such file or directory
molto spesso quando installate nuovi programmi non attraverso il gestore di pacchetti o programmi destinati a un'altra distribuzione. Si verifica perché il sistema non riesce a trovare la libreria. Perché non viene trovata e caricata?
Per diversi motivi, di solito si tratta di una libreria che:
Per risolvere il problema, ci faremo guidare da questi motivi e cercheremo di risolverli.
Consideriamo quindi alcuni esempi specifici di risoluzione di questo problema in base ai motivi indicati nel paragrafo precedente.
Non c'è nulla di complicato in questo caso e tutto è abbastanza chiaro: la libreria non è semplicemente presente nel sistema, ecco perché si ottiene questo errore. Per questo motivo è necessario trovare il pacchetto della libreria con l'aiuto di un gestore di pacchetti e installarlo. Di solito, i pacchetti con le librerie si chiamano come le librerie stesse con il prefisso lib
.
Se ci manca la libreria libfuse2.so
, possiamo trovarla in Ubuntu con questo comando:
$ sudo apt search libfuse2
Quindi l'unica cosa che resta da fare è installarla:
$ sudo apt install libfuse2
Quando si deve compilare un programma dai sorgenti, è necessario installare anche i file di intestazione:
$ sudo apt install libfuse-dev
E così per qualsiasi libreria. Ma questo non funziona sempre.
In pratica, ci sono casi in cui la libreria viene installata, ma l'errore persiste e non permette agli utenti di interagire normalmente con il sistema. Cosa fare in questi casi? Innanzitutto, controllare il boot loader di Linux che non riesce a trovare la libreria. La ricerca deve essere eseguita nelle directory specificate nei file di configurazione /etc/ld.conf.d/
. Di norma, queste sono /usr/lib, /lib, /usr/lib64, /lib64
. Se la libreria è installata in una directory diversa, il problema è ovviamente alla radice.
È possibile vedere quali librerie sono attualmente disponibili per il caricatore utilizzando il comando:
$ ldconfig -p
Trovare la posizione della libreria utilizzando il comando locate
. Ad esempio, siamo interessati alla libreria librtfreader.so:
$ locate librtfreader
Quando conosciamo la posizione di /opt/kingsoft/wps-office/office6/
, dobbiamo fare in modo che il caricatore possa rilevare la libreria. Aggiungiamo il percorso /etc/ld.so.conf.d/
al file di configurazione o alla variabile LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
È possibile installare con qualsiasi libreria che richiami l'errore. Si può anche prendere la strada meno complicata di creare un collegamento simbolico alla libreria corretta nella directory corretta:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Questo accade di solito quando si utilizzano programmi per una distribuzione che non è stata installata. Ogni libreria ha una versione aggiuntiva, scritta dopo l'estensione .so
. Ad esempio, libav.so.1
. Il numero di versione cambia ogni volta che una libreria viene aggiornata.
Capita spesso che in una distribuzione un programma venga compilato con una dipendenza da una libreria, come libc .so.1
, mentre in un'altra distribuzione c'è solo libc.so.2
. Nella maggior parte dei casi le differenze sono minime e il programma può funzionare con la seconda versione della libreria. Quindi possiamo semplicemente creare un collegamento simbolico ad essa.
Ad esempio, non esiste la libreria libusb-1.0.so.1
. Ma esiste libusb-1.0.so.0.1
e possiamo usarla:
Per farlo, basta creare un collegamento simbolico alla libreria:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Spesso il programma non si accorgerà della sostituzione e funzionerà. Come soluzione intelligente, cercate di trovare su Internet la versione corretta della libreria per la vostra architettura e collocatela nella cartella /usr/lib/
o /usr/lib64/
. In seguito, però, è auspicabile aggiornare la cache:
$ sudo ldconfig
Se il problema persiste dopo questi passaggi, si consiglia di consultare la documentazione del programma o del sistema operativo per informazioni più dettagliate sulle versioni delle librerie necessarie e su come installarle.