Pergunta

Eu estou tentando instalar um binário pré-construídos na imagem Android um costume. Por que eu tenho algo copiado para um novo diretório em prebuilt/android-arm/ com um arquivo Android.mk semelhante a esta:

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

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

Então, se eu executar make system_image binary_name, o arquivo binário é copiado para /bin/ imagem do sistema em. E se eu executar o emulador eu posso ver o arquivo binário em /system/bin. As permissões são o mesmo que os outros executáveis ??(-rwxr-xr-x) e, de acordo com file, este é um binário ARM (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped).

Mas quando eu executá-lo no emulador, ele diz:

# binary_name
binary_name: not found

Eu straced-lo e isso é o que eu posso 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>

Mas o arquivo está lá, e strace é capaz de encontrá-lo.

Qualquer idéia do que pode estar acontecendo?

Atualizar : Como Kristof diz, este é provavelmente um problema de ligação dinâmica, mas eu não tenho ldd para ARM Android ...

Foi útil?

Solução

Talvez algumas das bibliotecas dinâmicas necessárias não pode ser encontrada.

Tente 'ldd binary_name'

A saída deve ser um pouco como isso se todas as bibliotecas podem ser encontrados. bibliotecas em falta deverão ser claramente identificadas.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top