Salve a tutti e ben tornati dalle vacanze!Per riprendere un po’ il ritmo con il blog vi propongo dei mini-post che rispondono velocemente ai più comuni problemi di compilazione ed esecuzione di programmi.
Il primo problema che risolveremo è il seguente
A chi non è capitato almeno una volta nella vita?
PREMESSA:
Ogni applicazione sul vostro sistema usa delle librerie. Una libreria non è altro che un insieme di codice già pronto e compilato che esegue delle funzioni specifiche. Questo permette ad ogni sviluppatore di non reinventare la ruota ogni volta ma di utilizzare il codice già scritto da altri.
Una libreria può essere statica (.a) o dinamica (.so o .dll su Windows). Nel primo caso la libreria viene inglobata nell’eseguibile in fase di compilazione, nel secondo invece la libreria è un file separato che viene agganciato all’eseguibile durante il caricamento del programma da un componente del sistema operativo chiamato linker dinamico.
Ovviamente le librerie dinamiche ottimizzano meglio le risorse evitando che del codice uguale venga replicato inutilmente in ogni eseguibile.
CAUSA:
Il messaggio di errore non lascia alcun dubbio: la libreria dinamica non è presente nel sistema o il linker dinamico non riesce a trovarla.
SOLUZIONE:
Se la causa è semplice la soluzione è altrettanto semplice.
Per prima cosa accertiamoci che la libreria sia installata e presente nel nostro sistema. Possiamo verificarlo agilmente con
locate libXXX.so
Che restituirà il percorso della libreria.
Se la libreria è stata installata durante la sessione corrente allora dobbiamo forzare l’aggiornamento del database con
sudo updatedb
A questo punto probabilmente la libreria si troverà in un percorso non standard. Non ci resta che aggiungere questo percorso nella lista dei percorsi scandagliati dal linker.
Per fare questo apriamo il file /etc/ld.so.conf
(o creiamo un file nella cartella /etc/ld.so.conf.d/
) e inseriamoci dentro il percorso della libreria, ad esempio:
/usr/local/lib
.
A questo punto chiamiamo
sudo ldconfig
per aggiornare la cache del linker.
E il gioco è fatto.
Alcune precisazioni:
– le .so non sono librerie dinamiche, ma semplicemente condivise (so sta per Shared Object)
– le librerie dinamiche tipo dll esistono anche per Linux, non solo per Windows
Ti conviene dare un’occhiata al Program-Library-HOWTO.
Ciao!
Interessante e utile questo intervento
nel caso invece la libreria non sia installata qual’e’ la procedura da seguire?
pax
Non credo
Scappato il dito.
Stavo scrivendo:
Non credo di aver capito la tua domanda, in particolare la parola ‘invece’. Lascerebbe supporre che nel mio commento io parli di libreria installata, ma non è così.