Uno dei primi metodi che ho imparato, per controllare se un file binario (eseguibile) avesse tutte le librerie necessarie per un corretto funzionamento (o addirittura per poter funzionare) e’ stato quello di utilizzare ldd

ldd /usr/bin/amarok

Segue una lista di librerie condivise e non:

libqt-mt.so.3 => /usr/lib/libqt-mt.so.3 (0xb770b000)

in questo caso possiamo vedere che libqt-mt.so.3 e’ presente e punta a /usr/lib/libqt-mt.so.3 (con un indirizzo finale)
Ma libqt-mt.so.3 da che pacchetto e’ fornito?
Se la nostra applicazione, al lancio, ci riporta un laconico:

error while loading shared libraries: libqt-mt.so.3: cannot open shared object file: No such file or directory

Significa che la libreria condivisa non e’ presente nel percorso specificato. A volte (raramente in questi ultimi anni) e’ sufficiente linkare la libreria che magari si trova in un altro percorso, al percorso richiesto dal programma stesso.
Per risalire al pacchetto (nel nostro caso pacchetto .deb) che contiene la libreria statica (pre-compilata) utilizzeremo questo sistema

========
Getlibs
========

Getlibs e’ il tool (script) che ci permette di risolvere le dipendenze di un pacchetto in maniera automatica.

Su sistemi 64-bit risolve le dipendenze per pacchetti 32-bit e 64-bit
Su sistemi 32-bit risolve le dipendenze per pacchetti 32-bit (ma va?)

Distribuzioni attualmente supportate:

* Tutte le versioni di Ubuntu: Gutsy, Feisty, Edgy, Dapper, Breezy, Hoary, Warty
* Tutte le versioni Debian: Sid (unstable), Lenny (testing), Etch (stable), Sarge (oldstable)
* Mepis (coi repository di Ubuntu)
* Tutte le distribuzioni basate su Ubuntu o Debian 32bit
* Funziona probabilmente con tutte le distribuzioni 64bit basate su Debian

Installazione

cd $HOME
wget http://www.boundlesssupremacy.com/Cappy/getlibs/getlibs
chmod +x getlibs
sudo mv getlibs /usr/bin

Facciamo subito una prova :

– per possessori di Ubuntu/Debian 64bit usare questo workaround prima di lanciare Getlibs

sudo dpkg -i –force-all nomepacchetto.deb

Cerchiamo le dipendenze di Amarok:

getlibs /usr/bin/amarok

$ -> ./getlibs /usr/bin/amarok
./getlibs: line 122: arch: command not found
This application isn’t missing any dependencies

Amarok, in questo caso, non necessita di ulteriori librerie.

Vogliamo fare una prova con un programma forse piu’ soggetto a queste problematiche? proviamo con Skype:

$ skype
skype: error while loading shared libraries: libQtDBus.so.4: cannot open shared object file: No such file or directory
$ getlibs /usr/bin/skype
Matched library libQtCore.so.4 to /feisty/libs/libqt4-core
Matched library libQtDBus.so.4 to /feisty/libs/libqt4-core
Matched library libQtGui.so.4 to /feisty/libs/libqt4-gui
Matched library libQtNetwork.so.4 to /feisty/libs/libqt4-core
Matched library libsigc-2.0.so.0 to /feisty/libs/libsigc++-2.0-0c2a
The following i386 libraries will be installed:
/feisty/libs/libqt4-core
/feisty/libs/libqt4-gui
/feisty/libs/libsigc++-2.0-0c2a
Continue? (y/n) y
Downloading…..Installing libraries …
New depedencies have been detected:
libdbus-1.so.3
Matched library libdbus-1.so.3 to /feisty/libs/libdbus-1-3
The following i386 libraries will be installed:
/feisty/libs/libdbus-1-3
Continue? (y/n) y
Downloading…..Installing libraries …

Un altra particolarita’ di Getlibs e’ quella di accettare, nella sintassi, anche il solo nome della libreria..utile magari se non conosciamo il percorso dell’eseguibile(le opzioni -32 e -64 si riferiscono all’architettura):

getlibs -32 libQtDBus.so.4
getlibs -64 libQtDBus.so.4

Possiamo inserire anche piu’ di una libreria, di seguito , lasciando soltanto uno spazio:

getlibs -32 libQtDBus.so.4 libstdc++.so.5

TIP

Abbiamo installato un pacchetto .deb da internet che, come pesso accade, non contiene le dipendenze? proviamo ad installarlo lo stesso lanciando subito dopo:

sudo apt-get -f install

– Guida adattata dall’originale

Related Posts Plugin for WordPress, Blogger...

Il tuo indirizzo ip:
18.206.48.142

Valutazione 3.00 su 5
happy wheels 2 demo

Category:

Senza categoria

Tags:

Commenti via Facebook:

Leave a Reply

Your email address will not be published. Required fields are marked *

*

7 Comments

  • Fin’ora ho vissuto benissimo anche senza, ma sembra comunque molto utile. Grazie della guida.

    Visto che si parla di librerie segnalo Ubuntu Packages, un sito che raccoglie molti pacchetti per Ubuntu in formato .deb, ci si trovano anche molte librerie. Esiste anche Debian Packages, il corrispettivo per Debian. Spero di non essere andato troppo fuori tema.

      Quota

  • AlexTG ITALY 12 anni ago

    Alla fine dell’articolo hai scritto (credo erroneamente) Getdeb anziché Getlibs… te lo segnalo giusto se vuoi correggere il lapsus…

      Quota

  • anch’io ho notato la stessa cosa di Alex.
    penso che tu ti sia solo confuso col sito! xD

    script interessante, anche se per ora non ho avuto bisogno di niente del genere…

      Quota

  • @tutti
    grazie, avevo in mente getdeb il sito
    😀
    non pensate male..ho ancora saldamente KDE

      Quota

  • paolo ITALY 12 anni ago

    Ottima risorsa

      Quota

  • Ottimo! Aggiungo un piccolo fix: se qualcosa dovesse andare così storto da ricevere un kernel panic basta eseguire la distro in recovery mode e dare da super user:

    dpkg -a –configure

      Quota