私も今更ではありますが、初めてActionScript Native Extensionに挑戦してみました。
しかし、今回はMac、もしくはLinux環境にMinGW32の環境を作成し、
そこでクロスコンパイル環境を構築し、ANEを作ってみました。
(ただ、はっきりいってANEはめんどくさい!)

理由としては、ずばり、zlibとaprなど既存のUnix(Linux)で使われているライブラリを使いたいからです。
また、構築も面倒なのでできれば、autoconf & automakeを使いたいと思った次第です。
まあ、MakefileのなかにANEの構築手順なんかも書いておけば、
いつもの、
./configure; make; make install;
のような感覚でいけるようにしたいのがGOALです。

実はこのネタを記述する前に、Java(JNA) & MinGW32 on Linuxを多少やっていたので、
この流れのままANEもやりたいと思った次第です。

このようにすれば、ActionScriptに関わらず、JavaからもNative Extensionが共通化できますので、
単純とはいきませんが、かなりの部分でいろいろな所に使い回しができると思ったからです。

で、ANEに関しては全くよくわからないので、
FlashDevelop + GCCでANE入門
を参考にさせてもらいました。

でもって、私はLinuxもしくはMacでのクロスコンパイル環境なので、まずはMinGW32をインストールします。
といっても、yum(Linux)、MacPortsを使うのでインストールは簡単です。

私はCentOSでやりましたが、EPELのリポジトリを使ってMinGW32をインストールするので、Fedoraの方がなにも考えなくてもすみます。

Linuxの場合

yum install mingw32-¥*

Macの場合

port install i386-mingw32*

のようにインストールします。
これで、環境が整いました。

さて、ともにhello.cを用意してautoconf & automakeの環境を作ってみたのですが、
ここで、Macの方は、

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for i686-strip... /opt/local/bin/i386-mingw32-strip
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for i686-gcc... /opt/local/bin/i386-mingw32-gcc
checking whether the C compiler works... no
configure: error: in `/Users/coltware/ane_work/anewin':
configure: error: C compiler cannot create executables
See `config.log' for more details

のようにエラーがでてconfigureが先に進みません。
logをみてどこが悪いのかはなんとなくわかりましたが、
解決するのが面倒そうなので、しょうがないのでgccのコマンドをたたいて作りました。
(といっても、まずは2回のみですが・・・)

Linuxの方は問題なかったので、やはり、
Windows版ANEはLinuxでの構築が自分にとっては良さそうです。
といってもMac上のVMWare FusionでのLinuxとWindowsなので一応ハードとしては1つですんでいます。

ちなみに、

#!/bin/sh

MINGW=/usr/bin/i686-pc-mingw32

export CC=$MINGW-gcc
export AR=$MINGW-ar
export LD=$MINGW-ld
export AS=$MINGW-as
export NM=$MINGW-nm
export RANLIB=$MINGW-ranlib
export STRIP=$MINGW-strip
export DLLTOOL=$MINGW-dlltool
export WINDRES=$MINGW-windres

./configure \
	--target=mingw32 \
	--host=i686-pc-linux-gnu \
	--host=i686-pc-linux-gnu

こんな感じにshellをつくってconfigureを実行しています。
ちなみに、作成されたdllは以下のようにして確認するとよいと思います。

objdump -p hello.dll | grep "DLL"	DLL
 vma:            Hint    Time      Forward  DLL       First
	DLL Name: Adobe AIR.dll
	DLL Name: KERNEL32.dll
	DLL Name: msvcrt.dll

これはLinuxいうlddみたいなもので、macではotoolというものがあるようです。
Windowsのファイルをみるにはこのobjdumpを使うとその代わりができるようです。

このまま、AndroidもsoでANEの作成までいければよいかなともっています。
ただ、Andoridでsoを使った際の
(これは、実際のARM上のハードの上で構築をしてみようと思っていますが・・・)

さて、ここからzlibとaprを使った外部ライブラリも使ってもうちょっと本格的なANEを作っていきたいと思います。
できれば、airxzipにzlibの処理を加えたいと思っているのですが・・・・

途中、手順や話が飛んでいるのは、まだ、きちんとまとまっていないので、
もうちょっと本格的なもののが作り込めたら、もう少しまとめて書き直すつもりです。

その他、参考
http://help.adobe.com/ja_JP/air/extensions/index.html

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2012年2月
« 1月   3月 »
 12345
6789101112
13141516171819
20212223242526
272829  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ