玄箱Proにdebian lennyをインストールしたので、自前で用意したネイティブプログラム(スタティックリンク)がAndroid(SDKのエミュレータ上でですが)で動作するか実験してみました。
ダイナミックリンクのネイティブプログラムについては、別のエントリで。
<実験環境>
Android SDK 1.0R1(Windows版)
debian lenny化した玄箱Pro
<実験1:debian lennyのarmel(EABI)の実行バイナリ(スタティックリンク)がAndroid(SDKのエミュレータ上でですが)で動作するか?
→ 動作する(問題なし)>
debian lennyのbusybox-staticパッケージに含まれる実行バイナリを取り出してAndroidに持って行き、実行できるか確認します。
・debian lenny化した玄箱Pro上で以下を実行します。
su root
# debパッケージのダウンロードのみ行う
apt-get -d install busybox-static
cp /var/cache/apt/archives/busybox-static_1%3a1.10.2-2_armel.deb /tmp
cd /tmp
# パッケージを展開する
dpkg-deb -x /var/cache/apt/archives/busybox-static_1%3a1.10.2-2_armel.deb .
# 形式を確認する
file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, stripped
# ftpなりsambaなりで、抽出したbusyboxというファイルをPCにコピー
・Windows上のAndroid SDKで、エミュレータ(emulator.exe)を実行します。
・adb.exeで、エミュレータにbusyboxをコピーします。
adb push busybox /data
・adb.exeで、エミュレータにログインして、busyboxが動作することを確認します。
adb shell
cd /data
chmod 755 busybox
./busybox-static
BusyBox v1.10.2 (Debian 1:1.10.2-2) multi-call binary
Copyright (C) 1998-2007 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.
Usage: busybox [function] [arguments]…
or: function [arguments]…
BusyBox is a multi-call binary that combines many common Unix
…
<実験2:debian lenny化した玄箱Pro上でセルフコンパイルした実行バイナリ(スタティックリンク)がAndroid(SDKのエミュレータ上でですが)で動作するか?
→ 動作する(問題なし)>
玄箱Pro上でサンプルプログラムをコンパイルし、生成された実行バイナリをAndroidに持って行き、実行できるか確認します。
・gccのバージョンは、gcc version 4.3.1 (Debian 4.3.1-9)です。
# gccのバージョンを確認する。
gcc -v
Using built-in specs.
Target: arm-linux-gnueabi
Configured with: ../src/configure -v –with-pkgversion=’Debian 4.3.1-9′ –with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs –enable-languages=c,c++,fortran,objc,obj-c++ –prefix=/usr –enable-shared –with-system-zlib –libexecdir=/usr/lib –without-included-gettext –enable-threads=posix –enable-nls –with-gxx-include-dir=/usr/include/c++/4.3 –program-suffix=-4.3 –enable-clocale=gnu –enable-libstdcxx-debug –enable-objc-gc –enable-mpfr –disable-libssp –disable-sjlj-exceptions –enable-checking=release –build=arm-linux-gnueabi –host=arm-linux-gnueabi –target=arm-linux-gnueabi
Thread model: posix
gcc version 4.3.1 (Debian 4.3.1-9)
・サンプルプログラムのソースコードを用意します。
/* sample.c */
#include <stdio.h>
#include <stdlib.h>
main() {
printf(“Hello World!!\n”);
exit(0);
}
・コンパイルします。
gcc -o sample sample.c
# 形式を確認する
file sample
sample: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped
・実験1と同様に、生成されたsampleというファイルを、adb pushでエミュレータにコピーします。
adb.exeで、エミュレータにログインして、sampleが動作することを確認します。
adb shell
cd /data
chmod 755 sample
./sample
Hello World!!
最近のコメント