2008-11-16

FOX Toolkit でクロスコンパイル

SourceForge.net Logo
FOX Toolkit は、C++で記述された GUI 用ライブラリです。UNIX 系 OS だけでなく、Windows にも対応しています。そのため、以前から MinGW クロスコンパイルで Windows 用ライブラリを作成しようとしてきましたが、なかなか DLL を作成できません。しかし、スタティックライブラリだけでも、それなりに利用価値があるだろうということで、RPM パッケージを公開することにしました。

[LIB] FOX

スタティックライブラリでコンパイルした場合、必要なルーチンがすべて取り込まれてしまうのでバイナリのサイズが大きくなりますが、その代わり、ファイル単体を他の Windows PC へ移して、DLL のランタイムライブラリなしに即実行することができます。

ここでは、FOX Toolkit を利用した、いわゆる Hello World! 的なプログラムのコンパイル例を紹介します。Hello World! のプログラム hello.cpp は以下のとおりです。このプログラムは、Wikipedia に掲載されていたプログラムをベースとしました。

// Hello World program with FOX toolkit
#include <fox/fx.h>

int main(int argc, char *argv[]) {
FXApp application("Hello", "FoxTest");
application.init(argc, argv);
FXMainWindow *main
= new FXMainWindow(&application, "Hello", NULL, NULL, DECOR_ALL);
new FXButton(main, "こんにちは、世界!(&w)", NULL,
&application, FXApp::ID_QUIT);

application.create();
main->show(PLACEMENT_SCREEN);
return application.run();
}

ファイルのコンパイルは、Makefile を作るほどではないので、次のようにしました。

$ i386-mingw32-g++ hello.cpp -s -o hello.exe -lFOX -lws2_32 -lgdi32 -lcomdlg32
-limm32 -lcomctl32 -lshell32 -mwindows

$ ls -l hello.exe
-rwxrwxr-x 1 bitwalk bitwalk 719360 2008-11-15 16:58 hello.exe
$ ./hello.exe

Wine での実行結果を以下に示します。ソースファイルは UTF-8 で記述されていますが、ボタンのフォントは正しく日本語で表示されています。Alt-w がアクセラレータキーになっています。

日本語フォント表示が心配だったので Windows Vista 上でも確認しました。

ちなみに FOX は Free Objects for X の略です。
 

0 件のコメント: