안드로이드에 미리 빌드 바이너리 설치 :“찾을 수 없음”
문제
맞춤형 안드로이드 이미지에 사전 제작 된 바이너리를 설치하려고합니다. 그것을 위해 나는 그것을 새 디렉토리에 복사했습니다. 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)
제휴하지 않습니다 StackOverflow