Programmi a 32 bit su Ubuntu a 64 bit »


Questa guida è stata testata su Ubuntu a 64 bit, ma dovrebbe andare più o meno con tutte le distrubuzioni derivate da Debian, con le dovute modifiche.

Installare se possibile la versione a 64 bit, se non c’è scaricare i sorgenti e compilarla sul proprio sistema. Se non si può fare o per qualche motivo si vuole far funzionare la versione a 32 bit del software che ci interessa già compilata, installare prima di tutto il pacchetto ia32-libs, che contiene la versione a 32 bit delle librerie più comuni e le installa in /usr/lib32 mettendole a disposizione del sistema.


sudo aptitude update
sudo aptitude install ia32-libs

Riprovare. Se non funziona, scrivere

ldd nomefile

Verranno mostrate le librerie richieste e la loro posizione, quelle non trovate sono indicate con “not found”, e significa che vi manca quella libreria a 32 bit, evidentemente non si trova nel pacchetto ia32-libs, probabilmente avete già installata quella libreria in versione a 64 bit, ma è inutile perchè a voi serve la versione a 32 bit.

Ad esempio, ho installato sulla mia Ubuntu a 64 bit 2.0, mi serviva il tool vditool che ho potuto scaricare dal sito, tuttavia era la versione a 32 bit, quindi all’avvio il risultato era il seguente:

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

Che si fa in questo caso? Si lancia il comando


ldd ./vditool

e il risultato è il seguente:

linux-gate.so.1 => (0xffffe000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7f10000)
libuuid.so.1 => not found
librt.so.1 => /lib32/librt.so.1 (0xf7f06000)
libdl.so.2 => /lib32/libdl.so.2 (0xf7f02000)
VBoxDD.so => not found
VBoxRT.so => not found
libstdc++.so.5 => /usr/lib32/libstdc++.so.5 (0xf7e48000)
libm.so.6 => /lib32/libm.so.6 (0xf7e22000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7e17000)
libc.so.6 => /lib32/libc.so.6 (0xf7cc8000)
/lib/ld-linux.so.2 (0xf7f47000)

Come si può vedere, mancano all’appello libuuid.so.1, VboxDD.so e VboxRT.so, dobbiamo procurarci le versioni a 32 bit. Vediamo come fare per la prima, si fa allo stesso modo per le altre.

L’idea è quella di vedere a quale pacchetto di Ubuntu appartiene e scaricarne la versione a 32 bit, successivamente estrarne i file e copiare le librerie richieste in /usr/lib32.

Per vedere il pacchetto di appartenenza, usare apt-file, installabile mediante

sudo aptitude install apt-file
sudo apt-file update

Per usarlo:

apt-file search libuuid.so.1 (sostituite la libreria richiesta)

Il risultato è:

libuuid1: /lib/libuuid.so.1
libuuid1: /lib/libuuid.so.1.2
libuuid1-dbg: /usr/lib/debug/lib/libuuid.so.1.2

Decido di scaricare il pacchetto libuuid1. Per fare questo vado sul sito
http://packages.ubuntu.com e attraverso la funzione “Search” cerco questo pacchetto. Lo trovo e posso scaricarlo in versione a 32 bit o a 64 bit. Ovviamente scarico quello a 32 bit.

Adesso lo estraggo mediante il comando

dpkg -x nomefile.deb

e ottengo una cartella lib in cui trovo i due file libuuid.so.1.2 e libuuid.so.1 che è un link simbolico al primo. Li copio entrambi in /usr/lib32 e poi faccio in modo che il file /usr/lib32/libuuid.so.1 punti al file /usr/lib32/libuuid.so.1.2.

Faccio lo stesso per le altre due librerie, che si trovano nel pacchetto -ose e per le altre librerie che spuntano successivamente, finchè il risultato del comando

ldd ./vditool

è il seguente:


linux-gate.so.1 => (0xffffe000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7f28000)
libuuid.so.1 => /usr/lib32/libuuid.so.1 (0xf7f24000)
librt.so.1 => /lib32/librt.so.1 (0xf7f1a000)
libdl.so.2 => /lib32/libdl.so.2 (0xf7f16000)
VBoxDD.so => /usr/lib32/VBoxDD.so (0xf7e9d000)
VBoxRT.so => /usr/lib32/VBoxRT.so (0xf7e3a000)
libstdc++.so.5 => /usr/lib32/libstdc++.so.5 (0xf7d80000)
libm.so.6 => /lib32/libm.so.6 (0xf7d5b000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7d4f000)
libc.so.6 => /lib32/libc.so.6 (0xf7c00000)
/lib/ld-linux.so.2 (0xf7f5f000)
VBoxVMM.so => /usr/lib32/VBoxVMM.so (0xf7b10000)
VBoxDDU.so => /usr/lib32/VBoxDDU.so (0xf7afa000)
VBoxDD2.so => /usr/lib32/VBoxDD2.so (0xf7ad7000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf79e3000)
VBoxREM.so => /usr/lib32/VBoxREM.so (0xf6131000)
libutil.so.1 => /lib32/libutil.so.1 (0xf612d000)

Non ci sono più librerie “not found”, quindi il programma funziona. Infatti il suo output è:

vditool Copyright (c) 2004-2005 InnoTek Systemberatung GmbH.
Usage: vditool [Params]
Commands and params:
NEW Filename Mbytes - create new image;
DD Filename DDFilename - create new image from DD format image;
CONVERT Filename - convert VDI image from old format;
DUMP Filename - debug dump;
RESETGEO Filename - reset geometry information;
COPY FromImage ToImage - make image copy;
COPYDD FromImage DDFilename - make a DD copy of the image;
SHRINK Filename - optimize (reduce) VDI image size.

Autore : Giacomo Antonino Fazio aka l3golas


----> Leggi Anche :


4 commenti

  • At 2008.10.07 20:28, Fabio said:

    Molto, molto ma molto interessante. Grazie! :-)

    • At 2008.10.08 23:09, Anubisg1 said:

      leggete i commenti finali di questa pagina:

      http://www.kde-apps.org/conten.....tent=64905

      capirete perchè ubuntu a 64 bit è così disastrosa e chiede tutto sto macello per installare un programma a 32 bit

      • At 2008.10.31 23:25, giuseppe paoni said:

        ciao,sono un profano ma deciso a passare da windows a ubuntu. ho un processore 64 bit e al momento ho sul pc sia win xp pro che ubuntu 8.04 64 bit.il problema che tratti qui mi interessa perche lo incontro di continuo e non riesco spesso a uscirne.la tua guida non l’ho provata perche al momento non capisco il seguente passaggio:cosa vul dire fare in modo che un dato file punti a un’altro?
        ringrazio per qualsiasi informazione.non vedo l’ora di passare a ubuntu,ma troppe delle cose che faccio in win usano programmi a 32 bit che non riesco ad installare su ubuntu

        • At 2008.11.01 15:38, l3golas said:

          Ciao, forse allora ti converrebbe usare la versione a 32 bit, sicuramente ti causerà qualche grattacapo in meno, dato che sei ancora un “newbie”. Fare in modo che un file punti ad un altro siginifica creare un link, in questo caso parlo di link simbolici. Ad esempio hai un file x contenuto in /usr/lib/, invece che copiarlo in /usr/local/lib/, crei un link in esso tramite il comando ln, con la sintassi

          ln -s target linkname

          Quindi in questo caso:

          sudo ln -s /usr/lib/x /usr/local/lib/x

          Il “sudo” davanti è perchè devi lavorare su file di sistema.
          Comunque per maggiori info digita “man ln” e lì c’è scritto tutto, oppure cerca su Google.

          (Required)
          (Required, will not be published)
          Se sei alle prime armi con Linux fai la tua richiesta alla sezione Help per inesperti su InTiLinuX Forum.