やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

MinGWでGTK+3のHelloWorldコードをコンパイルできた

以前のリベンジ。 今回はコンパイルに成功し、ついにexeの実行までこぎつけた。取り急ぎ原因だけ。

開発環境

ライブラリ

前回まで

前回、MinGWでgtkmm3のHelloWorldコードをコンパイルできなかった。

今回はできた。

コンパイルできた

よくみるとこちらに書いてあった。

コンパイルする時に pkg-config をソースファイル (.c や .o 等) の後ろで指定しないとリンク出来ません。

以下のようにいろいろ書いたが、どれもソースコードを書いていない。 論外すぎる。なにやってんだ私。 一番上の記述でコンパイルが通った。

hello: hello.c
    gcc -o hello.exe hello.c `pkg-config --cflags --libs gtk+-win32-3.0` -mwindows -DUNICODE -D_UNICODE
#   gcc -mwindows -DUNICODE -D_UNICODE -o hello.exe `pkg-config --cflags --libs gtk+-win32-3.0`
#   gcc -o hello.exe `pkg-config --cflags --libs gtk+-win32-3.0` -mwindows -DUNICODE -D_UNICODE
#   gcc -o hello.exe -mwindows `pkg-config --cflags --libs gtk+-win32-3.0`
#   gcc -o hello.exe -mwindows `pkg-config --cflags --libs gtk+-3.0`
#   gcc -o hello.exe `pkg-config --cflags --libs gtk+-3.0`

実行エラー

でも、exeを実行すると、またしてもエラー。

「エントリポイントが見つかりません」

「プロシージャエントリポイント g_list_free_full がダイナミックリンクライブラリ libglib-2.0-0.dll から見つかりませんでした。」

ErrorDialog

ようするにGTK+3のDLLlibglib-2.0-0.dllが参照できていないっぽい。DLL一式をexeに配置すればイケそう。

とりあえず実行はできた

gtk+-bundle_3.6.4-20130921_win32.zipbinディレクトリにあるDLLファイルをすべて、exeとおなじディレクトリに配置することでexeが実行できた!

dialog

課題

DLL参照パスが指定できない

しかし、このままでは毎回gtk+3のプロジェクトをつくるごとにおなじDLLファイルをコピーせねばならない。 これを回避するために、DLL参照パスを設定したい。

しかし、以下の方法を試したが、どれも参照してくれなかったらしい。

  • 環境変数(Path, LIB, LIB)
  • pragma comment(lib, "C:/MinGW/msys/1.0/gtk3/bin/libatk-1.0-0.dll")

  • gccパラメータ -l
  • gccパラメータ -L
  • DLLファイル配置(c:/msys/1.0/local)
  • DLLファイル配置(c:/MinGW/local)
  • specファイル

長くなるので、それは次回にする。