GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come risolvere l'errore "Impossibile aprire il file oggetto condiviso" nelle distribuzioni Linux basate su Ubuntu

C'è un elenco di errori comuni che vedo spesso in Ubuntu. C'è problema con merge list, allora c'è BADSIG errore, e una serie di errori comuni di aggiornamento di Ubuntu.

Uno di questi errori comuni che vedo spesso durante l'installazione di un programma dal suo codice sorgente è errore durante il caricamento delle librerie condivise . L'errore completo generalmente è simile al seguente:

errore durante il caricamento delle librerie condivise:
Impossibile aprire il file oggetto condiviso:nessun file o directory di questo tipo

Ad esempio, stavo cercando di utilizzare il server FreeRADIUS e mi ha mostrato questo errore:

radiusd: error while loading shared libraries:
libfreeradius-radius-2.1.10.so:
cannot open shared object file: No such file or directory

Il motivo di questo errore è che le librerie del programma sono state installate in una posizione in cui il linker dinamico non riesce a trovarlo.

Lascia che ti mostri come puoi risolvere questo problema.

Correzione ing "Impossibile aprire il file oggetto condiviso:nessun file o directory di questo tipo" errore

Un modo rapido per correggere questo "errore durante il caricamento automatico delle librerie condivise" consiste nell'usare ldconfig.

Tutto quello che devi fare è aprire il terminale (Ctrl+Alt+T) e digitare il seguente comando:

sudo /sbin/ldconfig -v

Questa fodera dovrebbe risolvere il problema nella maggior parte dei casi. Tuttavia, in caso contrario, ho discusso un altro metodo per gestire questo errore. Ma prima, lascia che ti dica cosa fa il comando sopra.

Cosa sono i file oggetto condivisi? In che modo il comando precedente risolve il problema?

Vedete, in C/C++, un .so (oggetto condiviso) è un file di libreria compilato. Si chiama oggetto condiviso perché questo file di libreria può essere condiviso da diversi programmi. Queste librerie generate si trovano solitamente nelle directory /lib o /usr/lib.

Ora, se ti chiedi come ha fatto questo piccolo comando a risolvere questo problema, dovresti leggere la pagina man di ldconfig che dice:

ldconfig crea i collegamenti necessari e la cache alle librerie condivise più recenti che si trovano nelle directory specificate nella riga di comando, nel file /etc/ld.so.conf e nelle directory attendibili (/lib e /usr/lib ). La cache viene utilizzata dal linker di runtime, ld.so o ld-linux.so . ldconfig controlla l'intestazione e i nomi dei file delle librerie che incontra quando determina quali versioni devono avere i loro collegamenti aggiornati.

Spero che questa soluzione rapida ti aiuti a eliminare il brutto errore durante il caricamento del messaggio delle librerie condivise in Ubuntu e altri Linux.

In caso contrario, puoi effettuare alcune indagini e provare a risolvere il problema nel modo indicato nella sezione successiva.

Metodo alternativo per correggere l'errore "Impossibile aprire il file oggetto condiviso"

Il metodo sopra discusso risolve il problema se la libreria in questione è disponibile nel tuo sistema. Ma potrebbe non essere sempre così.

Se non hai il programma installato sul tuo sistema, non avrai il suo file di libreria. Ldconfig non può fare nulla se non c'è un file di libreria in primo luogo.

Quindi, il metodo alternativo consiste nell'installare il programma richiesto e dovrebbe creare automaticamente la libreria.

Lascia che te lo mostri con un esempio. Diciamo che vedi questo errore:

error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory

Il problema è con libgobject versione 2.0. Il numero di versione è importante perché alcuni programmi dipendono da una versione specifica della libreria e se non lo trovano si lamentano.

Ora, apt fornisce l'opzione di ricerca che può essere utilizzata per cercare un pacchetto e conoscerne la versione prima di installarlo.

[email protected]:~$ apt search libgobject
Sorting... Done
Full Text Search... Done
librust-gobject-sys-dev/focal 0.9.0-2 amd64
  FFI bindings to libgobject-2.0 - Rust source code

Ora, questo pacchetto librust-gobject-sys-dev potrebbe essere ciò di cui hai bisogno se sai che stavi cercando di eseguire un programma Rust. Ma cosa accadrebbe se fosse un programma Python in esecuzione che se ne lamentasse?

Puoi ampliare la tua ricerca rimuovendo la lib dal nome del pacchetto durante la ricerca. lib significa libreria e le librerie possono essere fornite da un pacchetto generico che potrebbe essere chiamato gobject-xyz.

Sarebbe una buona idea cercare la stringa nei nomi del pacchetto (invece della descrizione) per ottenere risultati più concisi.

[email protected]:~$ apt search --names-only gobject
Sorting... Done
Full Text Search... Done
gobject-introspection/focal-updates 1.64.1-1~ubuntu20.04.1 amd64
  Generate interface introspection data for GObject libraries

libavahi-gobject-dev/focal 0.7-4ubuntu7 amd64
  Development headers for the Avahi GObject library

libavahi-gobject0/focal 0.7-4ubuntu7 amd64
  Avahi GObject library

libcairo-gobject-perl/focal,now 1.005-2 amd64 [installed,automatic]
  integrate Cairo into the Glib type system in Perl

libcairo-gobject2/focal,now 1.16.0-4ubuntu1 amd64 [installed,automatic]
  Cairo 2D vector graphics library (GObject library)

libghc-gi-gobject-dev/focal 2.0.19-1build1 amd64
  GObject bindings

libghc-gi-gobject-doc/focal,focal 2.0.19-1build1 all
  GObject bindings; documentation

Nell'output troncato sopra, dovrai vedere se il pacchetto è correlato al programma originale che stavi cercando di eseguire. Devi anche controllare la versione della libreria fornita.

Una volta identificato il pacchetto corretto, installalo in questo modo:

sudo apt install package_name

Una volta installato, puoi eseguire nuovamente il comando ldconfig per aggiornare la cache:

sudo /sbin/ldconfig -v

Questo metodo richiede un certo sforzo da parte tua, ma è così che vengono gestite le dipendenze.

Non funziona niente, e adesso?

Se sei abbastanza sfortunato, i metodi di cui sopra potrebbero non funzionare per te. Cosa puoi fare?

Innanzitutto, tieni presente che le librerie condivise possono essere utilizzate in alcuni casi da altri pacchetti. Se stavi cercando di eseguire il programma XYZ e il programma ABC installa la versione corretta della libreria condivisa, potrebbe (o meno) funzionare per te. Puoi provarlo e provarlo.

In secondo luogo, se stai cercando di eseguire un programma troppo vecchio o troppo nuovo, potrebbe essere necessaria una versione della libreria che non è disponibile per la tua distribuzione Linux.

Quello che puoi fare è controllare se puoi usare qualche altra versione del programma. Ad esempio, utilizzando Eclipse versione 3 invece della versione 4. Questo potrebbe aiutare il tuo caso.

L'altro modo sarebbe controllare il sito Web o i forum degli sviluppatori e vedere se è possibile installare manualmente la versione corretta della libreria dal suo codice sorgente. Ciò richiede molto sforzo (nel 2020) ma non hai molte opzioni.

Ha funzionato per te?

Spero di averti chiarito un po' le cose. Sei riuscito a risolvere il problema delle librerie condivise nel tuo sistema? Se hai domande, suggerimenti, sentiti libero di lasciare un commento. Ciao :)



Ubuntu
  1. Ubuntu:come aprire un file .bak su Linux?

  2. Come configurare i messaggi di errore di xdebug per aprire il file nell'editor Kate su Ubuntu

  3. Rpm:Errore durante il caricamento di librerie condivise:Libz.so.1:Impossibile aprire il file di oggetti condivisi:nessun file di questo tipo

  4. libpulse.so.0:impossibile aprire il file oggetto condiviso:file o directory non presenti

  5. ImportError:libtk8.6.so:impossibile aprire il file oggetto condiviso:file o directory non presenti

Come utilizzare un comando file in Linux

Come aprire un file in Linux

Come modificare il limite di file aperti in Linux

Come risolvere:errore:nessun salvataggio di grub di partizione in Ubuntu Linux

Come installare l'ultimo Kodi su distribuzioni Linux basate su Ubuntu

Come risolvere l'errore "Il repository non è ancora valido" in Ubuntu Linux