Quando eseguo un processo che si collega a una libreria condivisa in fase di runtime (collegato all'avvio del processo, non collegato in seguito con dlload()
), dove cerca quel .so
file della libreria condivisa ( ) diverso da LD_LIBRARY_PATH
?
Sfondo:
Ho del codice C ++ che ho scritto che utilizza una particolare libreria di terze parti. Ho installato la libreria e compilato il mio codice su due piattaforme diverse, entrambe Ubuntu ma versioni diverse e anche versioni diverse di gcc. La libreria è stata compilata e installata dal sorgente e si trova /usr/local/lib
su entrambe le piattaforme. Quando compilo il mio codice, mi collego ai pkg-config --libs
parametri per la libreria di terze parti e ho verificato che pkg-config --libs
restituisce esattamente la stessa cosa su entrambe le piattaforme.
Il mio codice viene compilato correttamente su entrambe le piattaforme e LD_LIBRARY_PATH
non è definito (o definito come vuoto:) ""
su entrambe le piattaforme. Tuttavia, quando lo eseguo su un platoform funziona bene, e dall'altro ottengo questo errore:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Stranamente, quelli che non funzionano è la versione più recente di Ubuntu e gcc. : /
Quindi sto cercando di capire come quello che lavora è in grado di localizzare la libreria, in modo che io possa far sì che quello rotto localizzi la libreria allo stesso modo. (ovvero, senza impostazione LD_LIBRARY_PATH
)
Aggiornare:
Ecco il mio output da cat /etc/ld.so.conf.d/*
... sul sistema di lavoro (precedente):
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... sul sistema rotto (più recente):
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
ma continua a dare l'errore error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... C'è qualche motivo per cui non prenderebbe una directory /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
come suggerito di seguito. Se il problema persiste, aggiorna la tua domanda con l'output di ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, ma non ne sono sicuro.