Mingw GCJ + SWTのインストール

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)も一緒にインストールします

用意するもの

インストール手順

  1. Mingwのダウンロードページからダウンロードたファイルを同じフォルダに解凍します
  2. zipを解凍し、zip.exeをMingwを解凍したフォルダに移動します
  3. swt-x.x.x-win32.zipを解凍し、swt.jarとswt-win32-xxxx.dllをMingwを解凍したフォルダにコピーします
  4. 次のコマンドを実行してswt.jarからAWT関係のクラスを削除します(この方法が一番楽です)
  5. zip swt.jar -d *AWT*
  6. 次のコマンドを実行してswt.oを作成します
    (unreachable bytecode from...といった警告メッセージが大量にでますが、問題はないようです)
  7. gcj --jni -c --classpath=swt.jar swt.jar
  8. これで終了です、コンパイルするときは次のようにします
    (mainメソッドがあるクラスがTest、ソースファイルがTest.javaの場合)
  9. 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関係

SWT関係

2ちゃんねる関連スレ

注釈

  1. ネイティブコードを生成するとはいえ、コンパイルの段階では決定できない動作も多いため、コードによってはさほど速度が変わらない場合もあるようです