Como executar o aplicativo de 32 bits no Ubuntu de 64 bits?

132

Instalei o Ubuntu 14.04 e o atual SDK de desenvolvimento Android, que contém executáveis ​​de 32 bits. Descobri que não consigo executar esses binários de 32 bits. Tentar iniciá-los a partir do bash me dá um erro:

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

Está lá, porém:

$ 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. 

Antigamente, era possível instalar bibliotecas de 32 bits no Ubuntu de 64 bits para obter suporte a 32 bits, mas isso parece não funcionar mais.

Como executo aplicativos de 32 bits em um Ubuntu 14.04 de 64 bits?

Thomas Stuefe
fonte

Respostas:

186

Para executar um arquivo executável de 32 bits em um multi-arquitetura do sistema Ubuntu de 64 bits, você tem que adicionar a i386arquitetura e instalar os três pacotes de bibliotecas libc6:i386, libncurses5:i386e libstdc++6:i386:

sudo dpkg --add-architecture i386

Ou se você estiver usando o Ubuntu 12.04 LTS (Precise Pangolin) ou abaixo, use o seguinte:

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

Então:

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

Se falhar, faça também

sudo apt-get install multiarch-support

Após estas etapas, você poderá executar o aplicativo de 32 bits:

./example32bitprogram
Avinash Raj
fonte
@AvinashRaj Isso me ajudou! No entanto, qual é o último comando "sudo ./adb" que deve ser executado?
Marcel
1
Ele executa o arquivo binário de 32 bits adb que estava presente no diretório atual.
Avinash Raj
1
para que o aapt funcionasse no Ubuntu 14.04, eu tinha que instalar lib32z1também, mas notei que ele puxava a libc6-i386 (distinção, observe o hífen, não os dois pontos).
Chris Betti 23/05
Eu fiz seus passos, libc6:i386, libncurses5:i386, libstdc++6:i386estão versão mais recente e definido para instalado manualmente. Mas depois disso diz: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." e dependências não atendidas: libstdc++6-4.4-dev:i386depende g++-4.4:i386(não será instalado). conflitos: libstdc++6-4.4-dbg:i386... e outros conflitos sobre libstdc++6-4.4/6/7etc. O que está errado ou devo deixar como está agora?
Fredrick Gauss
@FredrickGauss entra aqui .
Avinash Raj
9

"Nenhum arquivo ou diretório desse tipo" pode aparecer quando você tem o seu binário, mas faltam algumas bibliotecas. Se você instalar o build-essentialpacote, você terá o lddcomando disponível. Este comando ldd ./adb | grep notirá mostrar quais bibliotecas estão faltando. Basta instalar essas bibliotecas no i386 arch com o apt. Assim: apt-get install libmissing:i386 Cuidado, alguns pacotes de bugs tentam excluir os abetos da versão de 64 bits.

Barafu Albino
fonte
Obrigado, isso explicaria a mensagem de erro estranha. Primeiro fiquei confuso por que o bash me daria esse erro (em vez de algum erro vindo mais claramente do processo filho que falta nas bibliotecas), mas agora acho que o bash vê o exec (3) retornando ENOENT e o imprime.
Thomas Stuefe
5

E se você quiser usar "adb", há um pacote para isso:

sudo apt-get install android-tools-adb

E cerca de bibliotecas de 32 bits - apenas:

sudo apt-add-architecture i386

Será suficiente.

aastefanov
fonte
Obrigado pela dica, mas eu queria usar as ferramentas do Android baixadas do google, não as dos repositórios do Ubuntu. Também não tenho certeza sobre a integridade desse pacote.
Thomas Stuefe
Os repositórios do Ubuntu devem ter a nova versão. O pacote contém apenas adb. Se você quiser fastboot - há pacote para ele também :)
aastefanov
3

Além da excelente resposta de Zanna e Avinash Raj, eu tive que instalar o gcc-multilib também:

sudo apt-get install gcc-multilib

Possivelmente isso é porque eu queria rodar uma versão antiga do gcc em 64 bits.

user2144067
fonte