2010年3月10日水曜日

GCJでコンパイルしてみた

MinGW/MSYSをインストールしてgcjしてみたがコンパイル後のプログラムを起動できないという罠にはまった。

つぎにthisiscool.comGCC/GCJ 4.3 (gcj-eclipse-merge-branch)をインストールしてようやくコンパイルと実行に成功した。

SWTを使ってウィンドウを表示するだけの単純なアプリなのに、コンパイルにはやたらと時間がかかるし、実行ファイルのサイズが55,842KBと巨大。upxで圧縮しても20,394KB。

JREをインストールしていない環境でも動作するプログラムをJavaで実装できることにはとても魅力を感じるけれど、この結果だと採用しにくいな。

a/Main.java
package a;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Main {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("HelloSWT");
        shell.setSize(480, 320);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }
}
コンパイル
gcj -fjni -c -o swt.o swt.jar
gcj -mwindows -o Hello --classpath=swt.jar --main=a.Main a/Main.java swt.o

1 件のコメント:

  1. gcj.exe (GCC) 4.4.0 でも -static オプションをつけたら期待通りに動いた。

    $ gcj -fjni -c -o swt.o swt.jar
    $ gcj -static -mwindows -o Hello --classpath=swt.jar --main=a.Main a/Main.java swt.o

    返信削除