문제

맞춤형 안드로이드 이미지에 사전 제작 된 바이너리를 설치하려고합니다. 그것을 위해 나는 그것을 새 디렉토리에 복사했습니다. prebuilt/android-arm/ 와 함께 Android.mk 이것과 유사한 파일 :

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

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

그래서 내가 달리면 make system_image binary_name, 이진 파일이 복사됩니다 /bin/ 시스템 이미지에서. 에뮬레이터를 실행하면 이진 파일을 볼 수 있습니다. /system/bin. 권한은 다른 실행 파일과 동일합니다 (-rwxr-xr-x) 그리고,에 따르면 file, 이것은 암 바이너리입니다 (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped).

그러나 에뮬레이터에서 실행하면 다음과 같이 말합니다.

# binary_name
binary_name: not found

나는 그것을 밟았고 이것이 내가 볼 수있는 것입니다.

# 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>

그러나 파일이 있으며 Strace는이 파일을 찾을 수 있습니다.

무슨 일이 일어날 수 있는지에 대한 아이디어가 있습니까?

업데이트: Kristof가 말했듯이, 이것은 아마도 동적 링크의 문제 일 것입니다. 그러나 Android Arm 용 LDD는 없습니다 ...

도움이 되었습니까?

해결책

아마도 필요한 동적 라이브러리 중 일부는 찾을 수 없습니다.

'ldd binary_name'을 시도하십시오.

모든 라이브러리를 찾을 수 있다면 출력이 약간 비슷해 보일 것입니다. 누락 된 라이브러리는 명확하게 표시되어야합니다.

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top