Aunque el paquete de herramientas de desarrollo de Android (ADT) está disponible como un paquete zip para 'Linux 64 Bit', establece los siguientes requisitos :
Las distribuciones de 64 bits deben ser capaces de ejecutar aplicaciones de 32 bits.
Y de hecho, solo ejecutar el eclipse empaquetado en un sistema Fedora 17 de 64 bits produce errores, porque no puede 'encontrar' varias herramientas de desarrollo, por ejemplo adb
o aapt
:
Error al ejecutar aapt: no se puede ejecutar el programa "/ home / juser / local / adt-bundle-linux / sdk / platform-tools / aapt": error = 2, No existe tal archivo o directorio: error = 2, No existe dicho archivo o directorio
El 'no existe ese archivo' es engañoso porque está allí (debajo de $ HOME / local):
adt-bundle-linux/sdk/platform-tools/aapt
Pero no puedo ejecutarlo en el shell:
~/local $ ./adt-bundle-linux/sdk/platform-tools/aapt
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt
Mirando el archivo
$ file adt-bundle-linux/sdk/platform-tools/aapt
adt-bundle-linux/sdk/platform-tools/aapt: ELF 32-bit LSB executable, Intel 80386,
version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8,
not stripped
vemos que es un binario 32. Y parece que mi sistema (actualmente) no es capaz de ejecutar aplicaciones de 32 bits.
¿Cómo cambio eso? ¿Cómo hago para que un sistema Fedora de 64 bits actual pueda ejecutar aplicaciones de 32 bits?
(Por supuesto, también se podría preguntar por qué alguien termina colocando binarios de 32 bits en un paquete binario llamado 'Linux 64 bit' ...)
Respuestas:
Con respecto a que eclipse no puede encontrar
adb
, etc., esto se debe a que sin las bibliotecas compartidas de 32 bits necesarias para ejecutarlas en el sistema, no son ejecutables.Con respecto a las bibliotecas de 32 bits, la situación es bastante simple: solo necesita instalar las bibliotecas de 32 bits adecuadas. En la instalación de fedora 17 de 64 bits que tengo aquí, las bibliotecas principales de 64 bits están en / usr / lib64 y las bibliotecas opcionales de 32 bits están en / usr / lib. Entonces, si llamo
ldd
a sdk / platform-tools / adb:Observe que todos estos están en / lib, que es un enlace simbólico a / usr / lib (no / usr / lib64). Mira:
Una biblioteca de C estándar de 32 bits. Lo que puede hacer es revisar las herramientas SDK de 32 bits y verificar para ver con qué están vinculadas
ldd
. No tengo un ejemplo a mano, pero si faltaldd
algo, informa algo como:Primero , para que ldd funcione, necesitará el cargador de 32 bits que viene con el glibc de 32 bits (sin esto, ldd lo llamará un archivo no ejecutable y no le dirá nada):
Eso está truncado, pero el paquete x86_64 es lo que ya tiene; El i686 es la versión de 32 bits. Así que solo instale eso.
No necesita ninguno de los paquetes 'devel', ya que nada se compila. Más allá de eso, las suposiciones educadas y
yum whatprovides
/yum search
deberían ayudar (mirando la lista de adb, también hay versiones de 32 bits de C ++ lib, ncurses, pthreads y algunas cosas que no sé).Consejo rápido sobre el uso
whatprovides
:;)
fuente
ldd
. Por la razón: no estoy convencido, llamandofile
a la versión de paquete deadb
pantallas: ELF ejecutable LSB de 32 bits, Intel 80386 - nada que ver con la emulación ARM - y / usr / bin / adb (del paquete fedora android-tools) en realidad está disponible como ELF ejecutable LSB de 64 bits, x86-64 .adt-bundle-linux/sdk/platform-tools/adb
, muestra 'no es un ejecutable dinámico'. Con respecto a la RUTA, este no es el problema, especificar completamente la ruta de, por ejemplo,./adt-bundle-linux/sdk/platform-tools/adb
en un terminal no funciona (da como resultado 'zsh: no existe dicho archivo o directorio [..]').Tienes que instalar el glibc de 32 bits:
Esto elimina el mensaje engañoso 'no existe tal archivo o directorio' cuando se intenta ejecutar un binario de 32 bits. Con eso, el sistema Fedora de 64 bits es capaz de ejecutar binarios de 32 bits.
Esto también elimina el mensaje engañoso de "no un ejecutable dinámico"
ldd
cuando se llamaldd
a un ejecutable dinámico de 32 bits.Ahora debe instalar las bibliotecas faltantes de 32 bits con las que
adt-bundle-linux/sdk/platform-tools
están vinculados los binarios :Eso es.
Antecedentes
Algunos antecedentes sobre cómo derivar los nombres de paquetes anteriores. Por ejemplo, mirando la salida de
significa que todavía faltan 2 bibliotecas para adb.
Para cada 'no encontrado' tenemos que buscar el nombre del paquete, por ejemplo:
Ahora tomamos el nombre base del paquete y le agregamos '.i686' para obtener la versión de 32 bits.
fuente
glibc.i686
permiteldd
trabajar correctamente con los binarios i386.Puede instalar el paquete necesario con:
fuente