以前のリベンジ。 今回はコンパイルに成功し、ついにexeの実行までこぎつけた。取り急ぎ原因だけ。
開発環境
- Windows XP Pro SP3 32bit
- MinGW
- msys 1.0
- gcc 4.6.2
- Chocolatey
ライブラリ
- gtkmm 3.6.0
- こちらを参考に環境構築した
- ビルドに必要だったツール
- 対象コード一式
- 対象バイナリ
- gtkmm-3.6.0-win32
- 自分でコンパイルすると上記のようなDLLファイルができるのでそれを使う
前回まで
前回、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 から見つかりませんでした。」
ようするにGTK+3のDLLlibglib-2.0-0.dll
が参照できていないっぽい。DLL一式をexeに配置すればイケそう。
とりあえず実行はできた
gtk+-bundle_3.6.4-20130921_win32.zipのbin
ディレクトリにあるDLLファイルをすべて、exeとおなじディレクトリに配置することでexeが実行できた!
課題
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ファイル
長くなるので、それは次回にする。