Quick Fix: error while loading shared libraries

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

error while loading shared libraries: libXXX.so: cannot open shared object file: No such file or directory

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.

JavaScript War : Firefox 5 – Chrome 13

In questa nuova rivoluzione Web chiamata per brevità HTML5, uno dei protagonisti è senza alcun dubbio il riesumato JavaScript. Tornato dalla tomba in cui sembrava essere stato sepolto per riportare nuova luce e dinamicità ai contenuti Web.

JavaScript, in quanto computazione client-side ha anche lo spiacevole effetto di condizionare le prestazioni di un sito e di scaricare il gravoso costo della sua esecuzione sui browser. Questa è la casus belli della JavaScript War che imperversa nei centri di sviluppo dei vari browser da qualche anno.

Iniziamo quindi ad analizzare la battaglia dei contendenti più accreditati: Firefox e Chrome.

Read more »

Python Profiling

Durante lo sviluppo di Cobra Draugths ho avuto la necessità di trovare un profiler per Python che facesse al caso mio. Dato che non c’è un unico strumento adatto ho deciso di spiegare passo passo come ottenere dei dati di profiling veloci, puliti e graficamente guardabili.

È una guida espressa: niente discussioni, niente commenti, solo fatti e procedure.

Read more »

Cobra Draughts

Chi mi segue su Google+ o Twitter sa già tutta la storia. Per chi invece non lo fa eccola qui.

Un paio di settimane fa stavo pensando a quale progetto portare per l’esame di Machine Learning. Dopo aver scartato un po’ di idee perché troppo banali e altre perché troppo complesse mi si è accesa la lampadina. Ho pensato di progettare un intelligenza artificiale per il gioco della dama in grado di apprendere con l’esperienza.

Read more »

Integrare Git con Eclipse

L’ultima release di Eclipse (la Indigo) è favolosa. A prima vista non sembra molto diversa dalle precedenti ma la reattività e la stabilità è notevolmente aumentata. Funziona così bene che ho ricominciato ad usarla dimenticandomi dei problemi che mi aveva dato Helios.

La prima cosa che ho cercato era l’integrazione con Git (si, sono innamorato).

Bene, la ricerca è stata breve e il risultato è molto soddisfacente: EGit. L’ultima versione di Eclipse include questo plugin nella vasta gamma dei plugin scaricabili.

Read more »

Lua Object Oriented

Con questo articolo tocchiamo il culmine di Lua. Scopriremo come implementare il paradigma ad oggetti in un linguaggio non Object Oriented come Lua. Scopriremo quindi come questo paradigma manuale lasci una personalizzazione enorme nel comportamento degli oggetti e nella definizione delle classi.

Read more »

Android NON è in Java

La notizie e le informazioni in internet vanno sempre verificate. Molte cose infatti si tramandano di bocca in bocca (o di tastiera in tastiera) fino a confondersi. Le senti ripetere talmente tante volte che alla fine te ne convinci e le accetti acriticamente.

Arriva poi il giorno che ti informi e scopri che le cose non sono proprio così o che, in fondo, sono molto più complesse. Fra questo ricade anche l’asserzione Android è scritto in Java.

Read more »

Approfondiamo Lua 5.2 Beta

Lo sviluppo di Lua procede lento ma costante. Ieri è stata infatti rilasciata la Beta di Lua 5.2. La nuova versione del linguaggio introduce, come è solito, grandi cambiamenti e una manciata di incompatibilità con le precedenti versioni. Vediamone alcune (la lista completa la trovate qui)

Read more »

Difendersi dai Programmattori

Fra le parole più abusate su internet un posto d’onore va a programmatore (o developer e varianti). Forse secondo solo a “H4ck3r”. In ogni caso, programmatore fa fico, creare programmi e dire alla gente “questo l’ho fatto io” non ha prezzo.

Ma la realtà è ben diversa. Spesso molti di questi individui sono programmAttori e nulla più. Molti conoscono la programmazione sciamanica, l’arte di scrivere mantra tantrici su dei file .c o .py e passarli ad un compilatore per ottenere qualcosa in cambio. Questa non è programmazione, almeno non al suo livello più nobile. Il web è pieno di questi arroganti developer. Vediamo come disinnescarli.

Read more »

Storia della logica non-monotona

L’uso della logica come tentativo di emulare il ragionamento umano è un arte antica. Già Aristotele nel IV secolo A.C., spinto dal suo enorme desiderio di razionalizzare il mondo, si era spinto fino al punto di cercare di meccanizzare il pensiero umano. Aristotele ci provò con i sillogismi che definiva come “un discorso nel quale, supposta la verità di alcune cose, si deduce la necessaria verità di una conclusione diversa dai presupposti”.

Verso la fine del 1200, il filosofo catalano Ramon Llull passò gran parte del suo tempo nel tentativo di creare macchine in grado di generare automaticamente ragionamenti utili (Ars generalis ultima). Sebbene il suo scopo fosse un po’ ardito (Ramon tentava di dimostrare la supremazia del Cristianesimo sull’Islam e l’Ebraismo facendo derivare automaticamente la dottrina Cristiana a partire da alcuni principi di base) la mole di tecniche di calcolo e di ragionamento create dal filosofo catalano fu decisamente elevata per l’epoca.

Tuttavia sia Aristotele che Lull che tutti gli altri che ci hanno provato nei secoli a venire (e ci provano tutt’ora) hanno fallito: i loro metodi si sono sempre trovati davanti al problema di non essere scalabili alla complessità del mondo reale. Apparve chiaro, insomma, che l’uomo non è una raffinata macchina risolutiva di formule logiche o, almeno, non solo.

Read more »

Powered by WordPress | Designed by: free Drupal themes | Thanks to hostgator coupon and cheap hosting