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?


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

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


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.