Flash C++ Compiler(FlasCC) のサンプルを少々コンパイルしてみた
FlasCC はどのような感じで利用できるのか、いくつかサンプルのコンパイルを試してみました。
開発者なら FlasCC の実行可能な環境(64-bit Java や Flex SDK のインストール)はほぼ事前に整っているであろうことから、FlasCC 用ファイルをダウンロードするだけで即利用は可能かと思われます。
FlasCC で使用される Cygwin に関してははこちらまったく馴染みがありませんでしたが、FlasCC 用ファイル内に必要な Cygwin ファイルは全て入っているようで、後は readme の手順に従っていけば、サンプルはさほど問題なく動作させる事ができました。
特徴
http://www.adobe.com/jp/joc/gaming/flascc.html
FlasCC は C/C++ のプログラムを変換し FlashPlayer で動作させることができるという代物です。ActionScript で作成したプログラムよりもどうやらかなり速く動作する、というのが特徴です。(それほど速くはないかもしれない、という検証をされている記事も見つかります。)
以前 FlasCC は Alchemy の名で呼ばれており、Alchemy 版 box2d は AS3 版 box2d よりも軽快に動く、という情報がありました。また、最近制作してみた Android AIR アプリにて AS3 版 box2d の動作速度があまり速く動作してくれなかった、という事から、早速調査に乗り出してみた次第であります。
検証準備
サンプルのコンパイル検証を行った環境は メインPC の Windows7 64bit とノートPC の Windows8 64bit です。
メインPC でサンプル C言語ファイルのコンパイル(変換)を試してみると、Java Virtual Machine(JVM)の起動ヒープメモリが足りない的なエラーメッセージが表示され失敗してしまいます。よって gcc.exe を実行する際は「-jvmopt=-Xmx1G」というコンパイラオプションの記述の追加を行いました。
例えば FlasCC の readme.html 内には以下のようなサンプル命令文があります。
/cygdrive/c/flascc/sdk/usr/bin/gcc.exe hello.c -emit-swf -o hello.swf
これを以下のような記述にすることで実行可能になりました。
/cygdrive/c/flascc/sdk/usr/bin/gcc.exe -jvmopt=-Xmx1G hello.c -emit-swf -o hello.swf
ノートPC の Windows8 では上記記述は不要でした。JVM のどこかのデフォルト設定でヒープメモリの設定とか行えるのでしょうかね。
追記1)
メイン PC には 32bit版 と 64bit 版二種類の JVM がインストールされてしまっており、これが原因でヒープメモリ設定を行わなくてはならなかった模様。32bit版をアンインストールしたらエラーが発生しなくなりました。
また私は、flex sdk は Cドライブ直下ではなく以下のディレクトリに配置しています。
C:\Program Files (x86)\Adobe\flex_sdk\flex_sdk_4.8_air3.4
make コマンド実行時 flex sdk へのパスを指定する所は以下のように記述することで実行が通りました。
FLEX=/cygdrive/c/PROGRA~2/Adobe/flex_sdk/flex_sdk_4.8_air3.4
サンプル5 SWC 生成
FlasCC/samples/05_SWC ディレクトリ内サンプルは、C/C++ のソースコードを swc 化するサンプルのようです。
生成された swc の中がどうなっているのか確認すべく FDT でクラスパスを通してみましたが、何故か swc の中身を見ることができません。生成がうまくいかなかったのだろうかと、Flash CS6 で試しに生成された swc を利用してみたところ、問題なく利用可能でした。
FlasCC から生成された swc は何か通常のものとフォーマットが異なるのでしょうか。Flash Buider では確認できるのかもしれません。あるいは利用している FDT は一つ前のバージョン(FDT5.6)のものなので、最新版では見ることが可能であるか、あるいは今後改善される可能性があります。
サンプル box2d
FlasCC/samples/Example_Box2D ディレクトリ内には、おそらく私の本目的である C言語版 box2d がそのまま配置されているようです。Makefile を実行する事で C言語版 box2d が swc に変換される事でしょう。
しかし…! 試してみたところ、エラーが発生してコンパイルできません。うぬぬ、口惜しい。コンパイル済みの swc を配置しておいてくれてもいいのに…!
エラー内容を見ると、たくさんメッセージが表示されていて問題が何なのかまだ解読できておりません。-jvmopt=-Xmx1G の指定が足りない的なメッセージもあります。ノート PC のほうでもこのメッセージが表示されましたが、どこにこの記述を追加すればよいのか、わからない状況です。
(どなたかコンパイルに成功した方がおられましたら、生成された swc を私めに恵んでくだせえ…!)
追記2)
追記1の対処によりサンプル box2d のコンパイルも通りました。いやっほう!!
追記3)
FDT Free の最新版をダウンロードし、swc にクラスパスを通してみたところ、見事 swc の内容が確認できました。というわけで、ためらっていた最新版 FDT の購入が決定しました。
FDT Download Page
http://fdt.powerflasher.com/buy-download/