2009-06-25 5 views
6

사용자 정의 Android 이미지에 사전 빌드 된 바이너리를 설치하려고합니다. 내가 make system_image binary_name를 실행한다면, 바이너리 파일 시스템 이미지에 /bin/에 복사됩니다Android에서 사전 빌드 된 바이너리 설치 : "찾을 수 없음"

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

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

: 그 동안 나는 이것과 유사한 Android.mk 파일 prebuilt/android-arm/에 새로운 디렉토리에 복사 한. 에뮬레이터를 실행하면 이진 파일 /system/bin을 볼 수 있습니다. 사용 권한은 다른 실행 파일 (-rwxr-xr-x)과 동일하며 file에 따라 ARM 바이너리 (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped)입니다. 내가 에뮬레이터에서 실행하면

, 그것은 말한다 : 나는 그것을 straced하고 이것이 내가 볼 수있는 것입니다

# 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를 그것을 찾을 수 있습니다.

어떤 일이 벌어 질 수 있는지 알고 싶습니다.

UPDATE : 크리스토프는 말한다,이는 동적 링크의 문제는 아마도,하지만 난 안드로이드 ARM에 대한 LDD가없는 ... 아마도 필요한 동적 라이브러리의 일부를 찾을 수 없습니다

답변

7

.

시도 '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) 
+0

감사합니다. 아마도 올바른 방법 일 것입니다. 안드로이드 이미지에서 ldd를 어떻게 얻을 수 있습니까? –

+4

크로스 컴파일러 툴체인에 툴 체인이있을 수 있습니다. gcc가 'arm-android-gcc'라고 가정하면 호스트 시스템에서 'arm-android-ldd'를 시도하십시오. 호스트 시스템에서 'readelf -d binary_name'을 시도해 볼 수도 있습니다. 둘 다 필요한 동적 라이브러리 목록을 제공해야하지만 수동으로 목록을 확인해야합니다. –

+0

확인되었는데, 공유 라이브러리와 관련된 것입니다. 그 중 하나는 빌드 된 이미지에 포함되어 있지 않습니다. 필자는 readelf를 알지 못했습니다. 대단합니다. :) 감사합니다! –

관련 문제