GCJ(GNU Compiler for Java)はJavaソースファイル又はクラスファイルからネイティブの実行ファイルを生成するフリーのAOT(Ahead Of Time)コンパイラです
直接ネイティブの実行ファイルを作成するので、メモリの消費が少なく実行速度も多少速くなります(*1)
また、配布する場合でもJREなどのJava実行環境をインストールしなくても動作するので非常に便利です
しかし、現在MingwのGCJではAWTやSwingなどの標準GUIライブラリを使うことができないようです
そこで、IBMがEclipseというJava統合開発環境のために作った高速GUIライブラリSWT(Standard Widget Toolkit)も一緒にインストールします
用意するもの
- Mingwから次のファイルをダウンロード
[http://www.mingw.org/download.shtml#hdr2] mingw-runtime
binutils
w32api
gcc-core
gcc-java
gcc-g++(CNIを使わない場合は不要) - SWT(SWT Binary and Sourceからswt-x.x.x-win32.zipをダウンロード)
[http://www.eclipse.org/downloads/index.php] - zip(-dが使えるもの)
[http://www.info-zip.org/pub/infozip/Zip.html#Win32]
インストール手順
- Mingwのダウンロードページからダウンロードたファイルを同じフォルダに解凍します
- zipを解凍し、zip.exeをMingwを解凍したフォルダに移動します
- swt-x.x.x-win32.zipを解凍し、swt.jarとswt-win32-xxxx.dllをMingwを解凍したフォルダにコピーします
- 次のコマンドを実行してswt.jarからAWT関係のクラスを削除します(この方法が一番楽です)
- 次のコマンドを実行してswt.oを作成します
(unreachable bytecode from...といった警告メッセージが大量にでますが、問題はないようです) - これで終了です、コンパイルするときは次のようにします
(mainメソッドがあるクラスがTest、ソースファイルがTest.javaの場合)
zip swt.jar -d *AWT*
gcj --jni -c --classpath=swt.jar swt.jar
gcj -mwindows --main=Test --classpath=swt.jar -o Test.exe swt.o Test.java
注意点
GCJでビルドした実行ファイルはJavaのライブラリを丸ごと含んでいるのでサイズがけっこう大きくなります(簡単なものでも2M前後になる)
SWTを使って作成した実行ファイルを配布するにはSWTのDLLを一緒に配布する必要がありますが、それほど大きなファイルではない(300Kほど)のでさほど問題にはならないと思います
コードやコメントに日本語を使用する場合はあらかじめ文字コードをUTF-8(メモ帳は不可、xyzzyで保存する場合はUTF-8N)にエンコードする必要があります(mingwのGCJでは--encodingオプションでエンコードを指定してもエラーになります)
もしエディタが用意できない場合はjavacでコンパイルしたクラスファイルからコンパイルすれば文字コードを気にしなくて済みます
リンク
GCJ関係
- GNU gcjガイド
- GCJ Status(英語)
- 非公式 Mingw GCC/GCJ Build(英語)
- メーリングリスト(英語)