日記帳

日記です。

Rhino 1.6R7 を MinGW の gcj でコンパイル

mozilla.org による Java で書かれた JavaScript の処理系である Rhino 1.6R7 を MinGWgcjコンパイルして Windows 用のバイナリを作ってみました.

MinGWgcc-3.4.2 に含まれている gcj でネイティブコードにコンパイルされて DLL などに格納されたクラスを動的にロードする方法がよくわからないのでいろいろ困りました.

Rhino のような Java ベースの言語処理系で Java のクラスを使う場合は普通 Reflection API 経由でクラスをロードします.しかし gcjコンパイルする場合,インタープリタコンパイルする時点ではクラスへの明示的な参照がないのでクラスがリンクされません.

UNIX 上の gcj のランタイムはその辺を上手いこと *1やってくれるようになっているのですが MinGW では上手くないようです.

しかたがないので使えそうな標準ライブラリへの参照を無理矢理作って全部インタープリタにリンクしてしまいました.全部といっても MinGWgcj 附属の libgcj は未実装の API が多数*2なので とりあえずそこそこ動きそうな以下のパッケージのクラスだけをリンクしています.

リンクしているクラスの中でも正しく動かないクラスが結構あると思いますがまぁ気にしない方向で… コマンドラインから JavaScript で遊ぶ程度ならそこそこ動くはずですし…