Come eseguire un'app a 32 bit in Ubuntu a 64 bit?


132

Ho installato Ubuntu 14.04 e l'attuale SDK di sviluppo Android, che contiene eseguibili a 32 bit. Ho scoperto che non posso eseguire quei binari a 32 bit. Cercare di avviarli da bash mi dà un errore:

$ ./adb
bash: ./adb: No such file or directory

È lì però:

$ ls -al ./adb
-rwxrwxrwx 1 thomas thomas 1231255 Jan 17 13:31 ./adb
$ file ./adb
./adb: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped. Same symptom for all the other 32-bit tools in the Android SDK. 

In passato si potevano semplicemente installare librerie a 32 bit su Ubuntu a 64 bit per ottenere il supporto a 32 bit, ma questo non sembra funzionare più.

Come posso eseguire app a 32 bit su Ubuntu 14.04 a 64 bit?


Risposte:


186

Per eseguire un file eseguibile a 32 bit su un multi-architettura di sistema Ubuntu a 64 bit, è necessario aggiungere l' i386architettura e installare i tre pacchetti di libreria libc6:i386, libncurses5:i386e libstdc++6:i386:

sudo dpkg --add-architecture i386

O se stai usando Ubuntu 12.04 LTS (Precise Pangolin) o precedente, usa questo:

echo "foreign-architecture i386" > /etc/dpkg/dpkg.cfg.d/multiarch

Poi:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

Se fallisce, fallo anche tu

sudo apt-get install multiarch-support

Dopo questi passaggi, dovresti essere in grado di eseguire l'applicazione a 32 bit:

./example32bitprogram

@AvinashRaj Questo mi ha aiutato! Tuttavia, quale dovrebbe essere effettivamente l'ultimo comando "sudo ./adb"?
Marcel,

1
Esegue il file binario adb a 32 bit che era presente nella directory corrente.
Avinash Raj,

1
per far funzionare aapt su Ubuntu 14.04, ho dovuto anche installare lib32z1, ma ho notato che è stato inserito in libc6-i386 (distinzione, si noti il ​​trattino, non i due punti).
Chris Betti,

Ho fatto i tuoi passi, libc6:i386, libncurses5:i386, libstdc++6:i386sono nuova versione e impostare installato manualmente. Ma dopo dice: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." e dipendenze non soddisfatte: libstdc++6-4.4-dev:i386dipende g++-4.4:i386(non verrà installato). conflitti: libstdc++6-4.4-dbg:i386... e altri conflitti su libstdc++6-4.4/6/7ecc. Cosa c'è che non va o dovrei lasciarlo com'è adesso?
Fredrick Gauss,

@FredrickGauss entra qui .
Avinash Raj,

9

"Nessun file o directory di questo tipo" può apparire quando hai il tuo binario, ma manca di alcune librerie. Se installi un build-essentialpacchetto, avrai il lddcomando disponibile. Questo comando ldd ./adb | grep notti mostrerà quali librerie mancano. Basta installare queste librerie in i386 arch con apt. In questo modo: apt-get install libmissing:i386 attenzione, alcuni pacchetti buggy tenteranno di eliminare gli abeti della versione a 64 bit.


Grazie, questo spiegherebbe lo strano messaggio di errore. Prima ero confuso perché Bash mi avrebbe dato questo errore (invece di qualche errore proveniente più chiaramente dal processo figlio che manca alle librerie), ma ora immagino che Bash veda solo exec (3) che restituisce ENOENT e lo stampa.
Thomas Stuefe,

5

E se vuoi usare "adb" c'è un pacchetto per esso:

sudo apt-get install android-tools-adb

E circa le librerie a 32 bit - solo:

sudo apt-add-architecture i386

sarà abbastanza.


Grazie per il suggerimento, ma volevo usare gli strumenti Android scaricati da Google, non quelli nei repository Ubuntu. Inoltre, non sono sicuro della completezza di quel pacchetto.
Thomas Stuefe,

I repository Ubuntu devono avere la nuova versione. Il pacchetto contiene solo adb. Se vuoi il fastboot - c'è anche un pacchetto per esso :)
aastefanov il

3

Oltre all'ottima risposta di Zanna e Avinash Raj, ho dovuto installare anche gcc-multilib:

sudo apt-get install gcc-multilib

Forse perché volevo eseguire una vecchia versione di gcc su 64 bit.


0

Solo un'aggiunta a Zanna: Quanto segue ha risolto il problema con Android Studio di "impossibile installare le librerie":

$ sudo apt-get install libdb1-compact tzdata initscripts

Questo sostituisce la libreria mancante libstdc ++ 6-i386, probabilmente perché il pacchetto è obsoleto. Non sono sicuro del perché questa libreria specifica fosse importante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.