gcjによるjavaのネイティブコンパイルで下記のコマンドで実行するとundefined referenceエラーでリンクが上手くいかない。
gcj –main=HelloSWT –classpath=swt/win32/3218/swt.jar -Lthisiscool-gcc/swt/win32/3218 -lswt HelloSWT.java swtgif.o
で、2時間ほど色々試した結果、
gcj –main=HelloSWT –classpath=swt/win32/3218/swt.jar -Lthisiscool-gcc/swt/win32/3218 HelloSWT.java swtgif.o -lswt
で上手くいった。違いは”-lswt”と”.o”の順番である。
Manpage of GCCを見ると、
リンクは、オプション -c, -S, -E を指定して抑制しないかぎり(もしくはコンパイルエラーによってすべての処理が中断しないかぎり)、常に最終ステージで実行されます。リンクのステージにおいては、ソースファイルに対応した全ての .o ファイルと、 -l で指定したライブラリと、認識されなかったファイル名 (名前に .o のついたオブジェクトファイルや .a のついたアーカイブを含む) は、コマンドラインに並べられた順番でリンカに渡されます。
と、書いてあった。知るか、そんなん…