2009-06-25 15 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) 

:そのために私はこの1つに似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:クリストフが言うように、これは動的リンクの問題は、おそらくですが、私は、Android 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

ありがとうございます、あなたはおそらく正しい方法で、あなたはAndroidの画像でどのようにlddを持つことができますか知っていますか? –

+4

クロスコンパイラのツールチェーンに1つのツールチェーンが含まれている可能性があります。あなたのgccが 'arm-android-gcc'であると仮定して、あなたのホストシステムで 'arm-android-ldd'を試してみてください。 ホストシステムで 'readelf -d binary_name'を実行することもできます。どちらも必要なダイナミックライブラリのリストを提供するはずですが、リストを手動で確認する必要があります。 –

+0

確認済みです。共有ライブラリに関連するものですが、そのうちの1つはビルドされたイメージには含まれていません。 私はreadelfを知らなかった、それは素晴らしいです:)ありがとう! –

関連する問題