pockestrap

Web Programmer's memo

android用クロスコンパイル環境の構築

android用クロスコンパイル環境の構築
(VS7009D Arch Linux)
なんでメイン機でやらないのかって?android開発環境が混沌を極めちゃってるからさHAHAHA(白目
http://r-mix64.ddo.jp/?p=177 基本はここを参考に進めた。
実行した環境はNexus7 32GB(4.2.1/rooted)

必要なもののダウンロード,展開
$ wget http://dl.google.com/android/android-sdk_r21.0.1-linux.tgz  #SDK
$ wget http://dl.google.com/android/ndk/android-ndk-r8d-linux-x86.tar.bz2 #NDK
$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 #クロスコンパイラ
$ cd /usr/local
$ sudo tar xzf ~/android-sdk_r21.0.1-linux.tgz
$ sudo tar xjf ~/android-ndk-r8d-linux-x86.tar.bz2
$ sudo tar xjf ~/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
sdk,ndkに関しては、最新版を拾ってきた。
ロスコンパイラさんは見つからなかったから、リンク先のものを拾ってきた。ここを参考に、新しいものを見っけてきた。http://www.codesourcery.com/sgpp/lite/arm
展開先とかファイルの場所とかは適宜読み替えてください。
今回は、ホームフォルダにダウンロードして、/usr/localに展開してみた。これでいいのかな(震え声)

環境設定
$ sudo ln -s android-sdk-linux/ sdk
$ sudo ln -s android-ndk-r8d/ ndk
$ sudo ln -s arm-2008q3/ arm
$ export PATH=$PATH:/usr/local/arm/bin:/usr/local/sdk/tools
リンクをつくって環境変数を定義。リンク作ったらごちゃごちゃするしやらなくてもよかったかなぁ。
「env | grep PATH」と打って、最後にさっき追加したパスが入ってれば環境変数は設定されてる(筈)

コンパイル!実行!
$ arm-none-linux-gnueabi-gcc -static hello.c -o hello   #hello.cは適当に用意
###android
$ su
# mount -o remount rw /
# mkdir /home
# chmod 777 /home
# mv /sdcard/hello /home/hello
# chmod 777 hello
# exit #suユーザーから抜ける
$ ./hello
Hello World!
最初のマウントやら云々は、そうしないとread onlyとか表示されて何もできないため(http://tsingdao.wordpress.com/2012/02/16/read-only-file-system/)。
で、SDカードだとchmodできない(らしい)ので、/homeってディレクトリをつくってみる。いいのかな(白目
予めsdにでも移しておいた実行ファイルを/homeに。実行できるようにする。
そして実行!