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.