2012-09-02 12 views
14

Ho un problema con le librerie condivise e gcc. All'inizio non ero in grado di eseguire il mio programma compilato perché ricevevo il seguente errore: errore gcc durante il caricamento delle librerie condivise.gcc: le librerie collegate in/usr/local/lib non sono state trovate, ma /etc/ld/so.conf.d/libc.conf lo elenca?

Ho fatto qualche ricerca e ho scoperto che questo è dovuto al fatto che la libreria condivisa non può essere trovata. Tuttavia avevo già identificato che la libreria condivisa si trova in/usr/local/lib, che AFAICT è una directory comunemente usata per le librerie condivise e dovrebbe funzionare sin dall'inizio.

Ho letto che è possibile impostare LD_LIBRARY_PATH, che ha funzionato per me. Tuttavia non desidero impostare questo ogni volta che voglio eseguire il mio programma.

Ulteriore ricerca della modifica suggerita ld.so.conf. Quando ho guardato in questo ha avuto il seguente:

include /etc/ld.so.conf.d/*.conf 

Guardando nella directory ld.so.conf.d mi mostra una serie di file, tra cui libc.conf. All'interno di questo file è il seguente:

/usr/local/lib 

Quindi la mia domanda è, perché ho bisogno di impostare manualmente LD_LIBRARY_PATH quando il ld.so.conf sembra usare la libc.conf che include/usr/local/lib?

C'è qualcosa che mi manca qui che deve essere configurato prima? C'è un'opzione in fase di compilazione che mi manca?

Devo notare che per compilare, ho dovuto specificare il percorso della libreria, non so se questo è un sintomo del mio problema o comportamento normale.

Devo anche notare che questo è un problema per me quando installo il mio software su altri sistemi. Avrei pensato che dovrei essere in grado di mettere il .so nel posto appropriato e installare il mio programma senza scherzare con ld.so.conf.

Spero che questo sia il forum giusto per questa domanda, ho letto le FAQ e penso che sia ok.

Cheers.

+1

Hai eseguito 'ldconfig' dopo ogni modifica di (ad esempio scrivi in)'/usr/local/lib'? –

+0

Ho pensato che ldconfig doveva essere eseguito solo dopo aver cambiato i file conf, non quando si metteva un file in/usr/local/lib? – Metalskin

+1

Penso di aver risposto alla mia domanda, ho cercato su google ldconfig e sembra che ci sia una cache che deve essere aggiornata. Ho fatto un ldconfig -p e grep'd per la libreria e non c'è, quindi sembra che il problema sia la cache che ldconfig gestisce. Grazie Basile! Dovrei ora rispondere alla mia stessa domanda? Altre domande in quest'area non chiariscono che è necessario eseguire ldconfig quando vengono aggiunte nuove librerie, esse leggono che si esegue quando si cambiano i file conf. – Metalskin

risposta

18

È necessario eseguire ldconfig (come root) dopo ogni cambio di directory configurate tramite /etc/ld.so.conf o sotto /etc/ld.so.conf.d/, in particolare nel suo caso dopo ogni aggiornamento all'interno /usr/local/lib (per esempio dopo ogni aggiunta o l'aggiornamento di alcune librerie condivise lì).

Problemi correlati