13

Android 4.1 (Jelly Bean) でネイティブ ARM 実行可能ファイルを実行する方法を探しています。たとえば、古典的な C プログラムをコンパイルすると、

// hello.c
#include <stdio.h>
int main() {
    printf("Hello world");
}

たとえば、Android NDK を使用して ARMv7a 実行可能ファイルに変換helloし、それを Android シェルで実行します。実行可能ファイルをにプッシュするなど、Webで提案されている方法を試しまし/data/local

adb push hello /data/local

パーミッションを変更して実行できるようにする

adb shell chmod 755 /data/local/hello

次に、シェルでそれらを呼び出します

adb shell /data/local/hello

最後のステップはエラーで失敗します:

/data/local/hello: not found

しかし、明らかにファイルはそこにあります。問題は、Jelly Bean のシェルでエイリアンのバイナリを実行できなくなったことだと思います。誰でもこれを確認して解決策を教えてもらえますか?

4

2 に答える 2

6

Android でネイティブ ARM バイナリを実行する場合は、-staticでコンパイルする必要があります。

ビルドに使用するlibc (Android NDK ではなく標準の ARM ツールチェーンを使用する場合) は、Android のlibc (バイオニック) とは異なるため、バイナリがターゲット上のlibcに動的にリンクしようとしても、 libcが存在しないためリンクされません。目標。

-staticオプションを使用すると、ビルド時に libc から必要なものをリンクすることができ、動的にリンクすることを心配する必要がなくなります。

于 2012-11-02T20:57:24.810 に答える
1

adb push が「アクセス許可が拒否されました」エラーをダンプしていないことを確認します。adb shell ls /data/local を実行してファイルの存在を確認します。

4.0.4 に更新したため、/data/local にはアクセスできませんが、/data/local/tmp にはアクセスできません。これにより、「見つかりません」というエラーが説明されます。

于 2012-10-08T11:02:49.413 に答える