言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

MinGW + Gtk プログラミング。コンパイルの仕方。

pkg-config はソースの後に書かなくてはいけない!!!

# コンパイルの例
gcc -o hello hello.c -mwindows `pkg-config --cflags --libs gtk+-2.0`

MinGWGtk を使うと、Windows でも Linux でも動く GUI プログラムを作れます。しかし、私の環境だけかも知れないけどコンパイルのしかたで滅茶苦茶悩んだのでメモします。コンパイルする時に pkg-config をソースファイル (.c や .o 等) の後ろで指定しないとリンク出来ません。何故だ。。。

例えば超簡単な Gtk プログラムの例を挙げます。hello.c で保存します。

#include <gtk/gtk.h>

static void destroy(GtkWidget *widget, gpointer data)
{
  gtk_main_quit();
}

int main(int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *label;
  
  gtk_init(&argc, &argv);
  
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  label = gtk_label_new("Hello, World!");
  gtk_container_add (GTK_CONTAINER (window), label);
  gtk_widget_show (label);
  gtk_widget_show(window);
  
  g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL);
  gtk_main();

  return 0;
}

これを MSYS + MinGWコンパイルする際に、ライブラリやヘッダの位置を直接書かずに、pkg-config というプログラムを通して取得するというのがお約束になっています。しかし、ソースファイルの前に書きましょう。

Gtk のインストールの仕方。

必ず先に MinGW をインストールして置いてから http://gladewin32.sourceforge.net/ より Gtk+/Win32 Development Environment をインストールします。必要な物が全部付いて来てとても便利です。

ランタイム

作ったプログラムを他のマシンで実行するにはランタイムファイルが必要です。PATH=/c/WINDOWS/system32:/c/WINDOWS とやってみたり Dependency Walker を使って必要なファイルを探すと良いと思います。フォントやら dll やらで 9M 程余分に必要なようです。