(2004.11.7 新規作成。)
(2005.7.16 MinGWを追加。)
Windowsネイティブなgtk2プログラムの作り方。前半はCygwinでのコンパイル方法を説明し、そのあとでMinGWでのコンパイル方法を紹介する。
Windows用のgtk2は、いくつかのWebサイトから入手できるが、モノによっては日本語のファイル名を扱えない(クラッシュしたりする)。次のところから入手できるものが優れている。
「Gtk+/Win32 Development Environment」というパッケージに、一通りのものが含まれている。このインストーラは、Cygwinの有無を判別して、ヘッダファイルなどもインストールしてくれる。
インストーラは、管理者権限のあるユーザーで実行すること。
インストール先は、cygwinで扱いやすいディレクトリ(フォルダ)にするといい。例えば、d:/cygwin/gtk など。
含まれるライブラリは、次のとおり。
極めて簡単なサンプルプログラム。単にウィンドウを表示し、そこにボタンを表示する。このボタンをクリックすると、プログラムが終了する。
日本語のテキストを含んでいるので、このソースはUTF-8で記述する。
#include <gtk/gtk.h> #include <stdlib.h> void onHello(GtkWidget* widget, gpointer data) { g_print("はろーわーるど\n"); exit(0); } int main(int argc, char* argv[]) { gtk_set_locale(); gtk_init(&argc, &argv); GtkWidget* top = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget* button = gtk_button_new_with_label("hello はろーわーるど"); g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(onHello), NULL); gtk_container_add(GTK_CONTAINER(top), button); gtk_widget_show_all(top); gtk_main(); return 0; }
Makefileは、少し気をつける必要がある。何も考えずに書くと、Cygwinのライブラリが使われ、実行するときにもCygwinが必要になる。
まず、コンパイルするときに、-mms-bitfields オプションを追加する。これがないと、出来上がったプログラムがクラッシュしたりする。
CFLAGS = -Wall -DGTK_DISABLE_DEPRECATED -mms-bitfields `$(PKG_CONFIG) --cflags gtk+-2.0`
リンク時には、-mno-cygwin オプションと -Wl,--subsystem,windows オプションが必要。前者はCygwinのライブラリを使わないようにするためのもので、後者はプログラムの実行時にコマンドプロンプトウィンドウを表示させないようにする。
LDFLAGS = -mno-cygwin `$(PKG_CONFIG) --libs gtk+-2.0` -Wl,--subsystem,windows
したがって、Makefileは次のようになる。pkg-configコマンドは、ネイティブ版gtk+に添付のものを使う。
CC = gcc PKG_CONFIG = /gtk/bin/pkg-config CFLAGS = -Wall -DGTK_DISABLE_DEPRECATED -mms-bitfields `$(PKG_CONFIG) --cflags gtk+-2.0` LDFLAGS = -mno-cygwin `$(PKG_CONFIG) --libs gtk+-2.0` -Wl,--subsystem,windows first.exe: first.o $(CC) -o first.exe first.o $(LDFLAGS) first.o: first.cc $(CC) $(CFLAGS) -c -o first.o first.cc
Windows XPで動かすと、次のようになる。
(2005.7.16 この節追加。)
MinGWそのもののインストールは、MinGWのインストール を参照してください。
Gtk+/Win32 Development Environmentは、PATHなどの環境変数を自動的に設定する。MinGWでは、環境変数はWindowsのコントロールパネルで設定・確認する。[システム]の詳細設定タブ、環境変数ボタンを押すと表示される。
msysのウィンドウを開いて、pkg-configが使えるか確認しておく。
$ which pkg-config /f/gtk-2.6/bin/pkg-config
MinGWでは、Cygwinと違い、コンパイルオプションとして-mno-cygwin や、-lWl,--subsystem,windows をつける必要はない。下記でコンパイル、リンクできる。
$ gcc -Wall -mms-bitfields <ソース名> `pkg-config --cflags --libs gtk+-2.0`