2012-09-19 7 views
13

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

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

をコンパイルし、helloは、Android NDKを使用して、Androidのシェルで実行しますと言います。私はこの方法は、そのようなことが

adb shell chmod 755 /data/local/hello 

で実行できるようにしてから使用して、シェルでそれらを呼び出すために

adb push hello /data/local 

変更許可によって/data/localに実行可能ファイルをプッシュすると、ウェブ上で提案しようとしている

adb shell /data/local/hello 

最後の手順でエラーが発生します。

/data/local/hello: not found 

ですが、明らかにそのファイルがあります。問題は、Jelly Beanのシェルが実行することを許可していないということです。alienバイナリはもうありません。誰でもこれを確認して解決策をくれますか?

+3

これはAndroidの質問に対するプログラミングではありません。私はこれがAndroidユーザーのハードコアに興味があると思う。 – ale

+0

@Chahkありがとうございました。しかし、私はそれが私の元の質問に答えたとは思わない。最終的に、私は 'dd'のようなプログラムをクロスコンパイルしたり、ARMのプリビルド版を使って実行したいと考えています。今私はシステム上に新しいバイナリをインストールする 'busybox'と 'kbox'を思い出すので、ここではセキュリティ上の問題はないと思います。私は彼らがどのようにそれをしたかを見るためにそれらの仕事をチェックします。 –

+3

@Chahk - スタックオーバーフローの問題は2011年10月からのものであり、そのため不特定のAndroidの古いバージョンに対応しているため、Jelly Bean *の回答は異なる可能性があります。質問者は実際に誰かがそれが正しいかどうかを確認してほしいだけです。これはAndroidに関する実用的な答える質問です。 –

答えて

6

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

(AndroidのNDK標準ARMツールチェーンを使用していない場合)あなたが構築するために使用 libcののlibc Androidのと異なっている(バイオニック)、したがって、あなたのバイナリをターゲットにのlibc に動的にリンクする予定libcがターゲットに存在しないため、表示されません。あなたはビルド時に libcのから必要なものにリンクし、動的で物事を結ぶ心配する必要はありません-staticオプションで

0

adb pushが「Permission denied」エラーをダンプしていないことを確認してください。チェック・ファイルが存在するかどうかを調べるには:adb shell ls/data/local

4.0.4に更新されて以来、/ data/localではなく/ data/local/tmpにアクセスできませんでした。 "エラー。

+0

GoogleのNDKスタンドアロンツールチェーンをインストールしてソースコードを再コンパイルすることで問題を解決します。フードの下でツールチェーンが行ういくつかの神秘的なことがあるはずです。 –

関連する問題