GNU/Linux >> Linux Esercitazione >  >> Linux

Errore Linux durante il caricamento delle librerie condivise:impossibile aprire il file oggetto condiviso:file o directory non presenti

La tua libreria è una libreria dinamica. Devi dire al sistema operativo dove può trovarla in fase di esecuzione.

Per fare ciò, dovremo eseguire questi semplici passaggi:

(1 ) Scopri dove si trova la libreria se non la conosci.

sudo find / -name the_name_of_the_file.so

(2) Verificare l'esistenza della variabile di ambiente del percorso della libreria dinamica (LD_LIBRARY_PATH )

$ echo $LD_LIBRARY_PATH

se non c'è niente da visualizzare, aggiungi un valore di percorso predefinito (o no se lo desideri)

$ LD_LIBRARY_PATH=/usr/local/lib

(3) Aggiungiamo il percorso desiderato, lo esportiamo e proviamo l'applicazione.

Nota che il percorso dovrebbe essere la directory in cui si trova il file path.so.something è. Quindi se path.so.something è in /my_library/path.so.something dovrebbe essere :

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app

fonte :http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html


Ecco alcune soluzioni che puoi provare:

ldconfig

Come ha sottolineato AbiusX:se hai appena installato la libreria, potresti semplicemente dover eseguire ldconfig.

sudo ldconfig

ldconfig crea i collegamenti e la cache necessari alle librerie condivise più recenti trovate nelle directory specificate sulla riga di comando, nel file /etc/ld.so.conf e nelle directory attendibili (/lib e /usr/lib).

Di solito il tuo gestore di pacchetti se ne occuperà quando installi una nuova libreria, ma non sempre, e non ti farà male eseguire ldconfig anche se non è questo il tuo problema.

Pacchetto Dev o versione errata

Se ciò non funziona, darei anche un'occhiata al suggerimento di Paul e cercherò una versione "-dev" della libreria. Molte librerie sono suddivise in pacchetti dev e non dev. Puoi usare questo comando per cercarlo:

apt-cache search <libraryname>

Questo può anche aiutare se hai semplicemente installato la versione sbagliata della libreria. Alcune librerie sono pubblicate contemporaneamente in diverse versioni, ad esempio Python.

Posizione della libreria

Se sei sicuro che sia installato il pacchetto giusto e ldconfig non l'ha trovato, potrebbe trovarsi solo in una directory non standard. Per impostazione predefinita, ldconfig cerca in /lib , /usr/lib e le directory elencate in /etc/ld.so.conf e $LD_LIBRARY_PATH . Se la tua libreria è da qualche altra parte, puoi aggiungere la directory sulla sua riga in /etc/ld.so.conf , aggiungi il percorso della libreria a $LD_LIBRARY_PATH o sposta la libreria in /usr/lib . Quindi esegui ldconfig .

Per scoprire dove si trova la biblioteca, prova questo:

sudo find / -iname *libraryname*.so*

(Sostituisci libraryname con il nome della tua libreria)

Se vai al $LD_LIBRARY_PATH route, ti consigliamo di inserirlo nel tuo ~/.bashrc file in modo che venga eseguito ogni volta che accedi:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

Aggiorna
Sebbene ciò che scrivo di seguito sia vero come risposta generale sulle librerie condivise, penso che la causa più frequente di questo tipo di messaggio sia perché hai installato un pacchetto, ma non hai installato la versione "-dev" di quel pacchetto.

Beh, non sta mentendo - non c'è libpthread_rt.so.1 in quell'elenco. Probabilmente dovrai riconfigurarlo e ricostruirlo in modo che dipenda dalla libreria che hai, o installare qualsiasi cosa fornisca libpthread_rt.so.1 .

Generalmente, i numeri dopo .so sono numeri di versione e spesso scoprirai che sono collegamenti simbolici tra loro, quindi se hai la versione 1.1 di libfoo.so, avrai un vero file libfoo.so.1.0, e collegamenti simbolici foo.so e foo.so.1 che puntano a libfoo.so.1.0. E se installi la versione 1.1 senza rimuovere l'altra, avrai un libfoo.so.1.1, e libfoo.so.1 e libfoo.so ora punteranno a quello nuovo, ma qualsiasi codice che richiede quella versione esatta può usa il file libfoo.so.1.0. Il codice che si basa solo sull'API versione 1, ma non importa se è 1.0 o 1.1, specificherà libfoo.so.1. Come ha sottolineato orip nei commenti, questo è spiegato bene su http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html.

Nel tuo caso, potresti farla franca con il collegamento simbolico libpthread_rt.so.1 a libpthread_rt.so . Tuttavia, non ci sono garanzie che non violerà il codice e non mangerà le tue cene davanti alla TV.


Linux
  1. Errore durante il caricamento delle librerie condivise libcrypto.so.1.1 – OpenSSL [fissare]

  2. Mkdir:Impossibile creare una directory:nessun file o directory di questo tipo?

  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. libstdc++.so.5:impossibile aprire il file oggetto condiviso, ma la libreria è installata e aggiornata

  5. libaio.so.1:impossibile aprire il file oggetto condiviso

Come risolvere l'errore "pacman:errore durante il caricamento delle librerie condivise" in Arch Linux

cp:ousing directory – errore durante la copia di una directory in Linux

"errore durante il caricamento delle librerie condivise:libjli.so:impossibile aprire il file oggetto condiviso:nessun file o directory del genere" Errore 'java -version' all'avvio

errore durante il caricamento delle librerie condivise:libncurses.so.5:

Errore irreversibile:cuda.h:file o directory non presenti

ImportError:libcblas.so.3:impossibile aprire il file oggetto condiviso:file o directory non presenti