2009-06-25 116 views
6

我試圖在自定義Android映像中安裝預編譯二進制文件。在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) 

所以,如果我跑make system_image binary_name,二進制文件系統映像複製到/bin/:對,我已經與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)。

但是,當我在模擬器上運行它,它說:

# binary_name 
binary_name: not found 

我已經straced它,這是我所看到的:

# 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:由於克里斯托夫說,這可能是動態鏈接的問題,但我沒有LDD的Android ARM ...

回答

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

謝謝你,你可能是在正確的方式,你知道我怎麼能在Android圖像ldd? – 2009-06-25 11:20:28

相關問題