Pregunta

Estoy intentando instalar un binario precompilado en una imagen de Android personalizada. Para eso lo he copiado a un nuevo directorio en prebuilt / android-arm / con un archivo Android.mk similar a este:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)

Entonces, si ejecuto make system_image binary_name , el archivo binario se copia a / bin / en la imagen del sistema. Y si ejecuto el emulador, puedo ver el archivo binario en / system / bin . Los permisos son los mismos que los otros ejecutables ( -rwxr-xr-x ) y, de acuerdo con file , este es un binario ARM ( ELF de 32 bits LSB ejecutable, ARM, versión 1 (SYSV), vinculado dinámicamente (usa libs compartidas), despojado ).

Pero cuando lo ejecuto en el emulador, dice:

# binary_name
binary_name: not found

Lo he arreglado y esto es lo que puedo ver:

# strace binary_name
execve("/system/bin/binary_name", ["binary_name"], [/* 9 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec", 12strace: exec)            = 12
write(2, ": ", 2: )                       = 2
write(2, "No such file or directory", 25No such file or directory) = 25
write(2, "\n", 1
)                       = 1
io_submit(1, -1344063348, {...} <unfinished ... exit status 1>

Pero el archivo está ahí y strace puede encontrarlo.

¿Alguna idea de lo que puede estar pasando?

ACTUALIZACIÓN : como dice Kristof, este es probablemente un problema de vinculación dinámica, pero no tengo ldd para Android ARM ...

¿Fue útil?

Solución

Quizás no se puedan encontrar algunas de las bibliotecas dinámicas necesarias.

Pruebe 'ldd binary_name'

El resultado debería verse un poco así si se pueden encontrar todas las bibliotecas. Las bibliotecas faltantes deben estar claramente marcadas.

linux-gate.so.1 =>  (0xb7fbf000)
libcap.so.2 => /lib/libcap.so.2 (0xb7fa7000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7fa3000)
libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7f64000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7f3e000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dde000)
libattr.so.1 => /lib/libattr.so.1 (0xb7dd9000)
/lib/ld-linux.so.2 (0xb7fc0000)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top