私はカスタムの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を持っていない...おそらく必要な動的ライブラリの一部が見つからない
ありがとうございます、あなたはおそらく正しい方法で、あなたはAndroidの画像でどのようにlddを持つことができますか知っていますか? –
クロスコンパイラのツールチェーンに1つのツールチェーンが含まれている可能性があります。あなたのgccが 'arm-android-gcc'であると仮定して、あなたのホストシステムで 'arm-android-ldd'を試してみてください。 ホストシステムで 'readelf -d binary_name'を実行することもできます。どちらも必要なダイナミックライブラリのリストを提供するはずですが、リストを手動で確認する必要があります。 –
確認済みです。共有ライブラリに関連するものですが、そのうちの1つはビルドされたイメージには含まれていません。 私はreadelfを知らなかった、それは素晴らしいです:)ありがとう! –