NDKスタンドアロンツールチェーンまたはCodesourceryを使用するのではなく、arm-linux-gnueabi-gccを使用してCから静的なHello Worldを構築したいです。
Ubuntuでは...
私は次のことをしました:
Sudo apt-get install gcc-arm-linux-gnueabi
次のようなhi.cを作成しました。
#include <stdio.h>
int main(int argc, char** argv) {
printf("hello world\n");
return 0;
}
私はこれを次のようにコンパイルしました:
arm-linux-gnueabi-gcc -static hi.c -o hi
このようなエミュレータで実行しました:
adb Push hi /data/hi
adb Shell /data/hi
しかし、私はこれを得る:
[1] Illegal instruction /data/hi
どのステップを忘れましたか?過去の経験に基づいて、この「すべき」は機能したはずですが、明らかにこれを台無しにしました。
Debianマシン(私の場合はVM)でこれを行うと、すべてうまくいきます。私はubuntuで同様のことをするのが間違っているときはわかりません。レオが提案したとおりかもしれませんが、私は確認できません。これはあなたのために働くはずです。
http://www.cnx-software.com/2012/01/16/installing-emdebian-arm-cross-toolchain-in-debian/
誰かがこのリンクを追加しましたが、説明で述べたツールチェーンを使用していません。誰かが興味を持っている場合に備えて、それを残します。
http://tariqzubairy.wordpress.com/2012/03/09/arm-binaries-static-library-for-Android/
Architecture/cpuを指定してみてください。コンパイラがエミュレータが処理できるよりも高いアーキテクチャバージョンでコードを作成しているようです。
これはうまくいくかもしれません:
arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi
それはubuntuデスクトップ上のCodeBenchコンパイラで私のために働いた。 https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029
このコマンドで静的バイナリを作成するだけです:
arm-none-linux-gnueabi-gcc -o hello -static hello.c
次に、adb Push hello/data
adb Shell $ ./data/helloに移動します。これにより、端末にHello Worldが出力されます。電話からも同じことができます。ターミナルエミュレータまたはSL4A bashシェルを使用して実行します。
私の知る限り、Android内で、何らかの形式のgcc-arm-linux-androideabiでコンパイルされていないユーザーランドアプリケーションを実行することはできません。
あなたのコードは実際に私のために動作します。
Ubuntuでコンパイルし、/ data/local/tmpにプッシュしました
そして、chmod 777 hi
最後にうまくいきます。