突然消失するかもしれないブログ

”とつきえブログ”

Androidでのネイティブ実行 その1

玄箱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!!

 

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。