¿Cómo ejecutar la aplicación de 32 bits en Ubuntu de 64 bits?

132

Instalé Ubuntu 14.04 y el SDK de desarrollo de Android actual, que contiene ejecutables de 32 bits. Descubrí que no puedo ejecutar esos binarios de 32 bits. Intentar iniciarlos desde bash me da un error:

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

Sin embargo, está allí:

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

En la antigüedad, uno simplemente podía instalar bibliotecas de 32 bits en Ubuntu de 64 bits para obtener soporte de 32 bits, pero eso ya no parece funcionar.

¿Cómo ejecuto aplicaciones de 32 bits en un Ubuntu 14.04 de 64 bits?

Thomas Stuefe
fuente

Respuestas:

186

Para ejecutar un archivo ejecutable de 32 bits en un sistema Ubuntu multi-arquitectura de 64 bits, hay que añadir la i386arquitectura e instalar los tres paquetes de bibliotecas libc6:i386, libncurses5:i386y libstdc++6:i386:

sudo dpkg --add-architecture i386

O si está utilizando Ubuntu 12.04 LTS (Precise Pangolin) o inferior, use esto:

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

Entonces:

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

Si falla, también

sudo apt-get install multiarch-support

Después de estos pasos, debería poder ejecutar la aplicación de 32 bits:

./example32bitprogram
Avinash Raj
fuente
@AvinashRaj ¡Esto me ayudó! Sin embargo, ¿cuál se supone que debe hacer el último comando "sudo ./adb"?
Marcel
1
Ejecuta el archivo binario adb de 32 bits que estaba presente en el directorio actual.
Avinash Raj
1
para poder seguir funcionando en Ubuntu 14.04, también tuve que instalarlo lib32z1, pero noté que se encontraba en libc6-i386 (distinción, nota el guión, no el colon).
Chris Betti
Hice sus pasos, libc6:i386, libncurses5:i386, libstdc++6:i386son la más nueva versión y se puso a instalado manualmente. Pero después de eso dice: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." y dependencias no satisfechas: libstdc++6-4.4-dev:i386depende g++-4.4:i386(no se instalará). conflictos: libstdc++6-4.4-dbg:i386... y otros conflictos sobre libstdc++6-4.4/6/7etc. ¿Qué está mal o debería dejarlo como está ahora?
Fredrick Gauss
@FredrickGauss entra aquí .
Avinash Raj
9

"No existe tal archivo o directorio" puede aparecer cuando tiene su binario, pero carece de algunas bibliotecas. Si instala el build-essentialpaquete, tendrá un lddcomando disponible. Este comando ldd ./adb | grep notle mostrará qué bibliotecas faltan. Simplemente instale estas bibliotecas en i386 arch con apt. De esta manera: apt-get install libmissing:i386 tenga cuidado, algunos paquetes con errores intentarán eliminar las versiones de 64 bits.

Barafu Albino
fuente
Gracias, eso explicaría el extraño mensaje de error. Primero me confundí por qué bash me daría este error (en lugar de algún error que viene más claramente del proceso secundario que pierde las bibliotecas), pero ahora supongo que bash solo ve que exec (3) devuelve ENOENT e imprime esto.
Thomas Stuefe
5

Y si quieres usar "adb" hay un paquete para ello:

sudo apt-get install android-tools-adb

Y sobre bibliotecas de 32 bits, solo:

sudo apt-add-architecture i386

será suficiente.

aastefanov
fuente
Gracias por el consejo, pero quería usar las herramientas de Android descargadas de Google, no las que están en los repositorios de Ubuntu. Tampoco estoy seguro de la integridad de ese paquete.
Thomas Stuefe
Los repositorios de Ubuntu deben tener la nueva versión. El paquete contiene solo adb. Si quieres fastboot - también hay un paquete para eso :)
aastefanov
3

Además de la excelente respuesta de Zanna y Avinash Raj, también tuve que instalar gcc-multilib:

sudo apt-get install gcc-multilib

Posiblemente esto se deba a que quería ejecutar una versión antigua de gcc en 64 bits.

usuario2144067
fuente
0

Solo una adición a Zanna: lo siguiente ha resuelto el problema de Android Studio de "no se pueden instalar bibliotecas":

$ sudo apt-get install libdb1-compact tzdata initscripts

Esto reemplaza la biblioteca que falta libstdc ++ 6-i386, lo que probablemente se deba a que el paquete ha quedado obsoleto. No estoy seguro de por qué esta biblioteca específica era importante.

Zohar Segal
fuente