Gtkmm3をMinGWでコンパイルはできたが、exe実行時にエラーダイアログが出て実行できない。
開発環境
- Windows XP Pro SP3 32bit
- MinGW 4.6.2
- gcc 4.6.2
ライブラリ
- GTK+3
- gtk+-bundle_3.6.4-20130921_win32.zip 参考元
- libatk-1.0-0.dll
- libgdk_pixbuf-2.0-0.dll
- libgio-2.0-0.dll
- libglib-2.0-0.dll
- libgobject-2.0-0.dll
- libpango-1.0-0.dll
- gtk+-bundle_3.6.4-20130921_win32.zip 参考元
- GTKmm3
上記のDLLファイルをhello.exeとおなじディレクトリに配置すると実行できる。
ソースコード
hello.cpp
#include <gtkmm.h>
int main(int argc, char* argv[])
{
Gtk::Main kit(argc, argv);
Gtk::Window window;
Gtk::Main::run(window);
return 0;
}
上記は昔やったGtkmm2のHelloWorld。 もしかしたらGtkmm3だと通らないかもしれない。
DLL配置
C:\MinGW\msys\1.0\gtk3\bin
、C:\MinGW\msys\1.0\gtkmm3\bin
のDLLファイルをすべてexeとおなじディレクトリに配置した。
コンパイルできた。
コンパイル
compile.bat
set make="C:\MinGW\bin\mingw32-make.exe"
set file="Makefile"
%make% -f %file%
pause
Makefile
hello: hello.cpp
g++ -o hello.exe hello.cpp `pkg-config gtkmm-3.0 --cflags --libs` -mwindows
実行時エラー
libstdc++-6.dll
ZNKSt7_cxx1112basic_stringIcSt11char_traitsIcESaIcEE2atEj
exe実行するとエラーダイアログが表示された。
「エントリポイントが見つかりません」 「プロシージャエントリポイント ZNKSt7_cxx1112basic_stringIcSt11char_traitsIcESaIcEE2atEj がダイナミックリンクライブラリ libstdc++-6.dll から見つかりませんでした。」
C:\tools\mingw32\bin\libstdc++-6.dll
環境変数
C:\tools\mingw32\bin
を環境変数のPathに追記してやればいける?
C:/tools/mingw32/bin
のようにしておく。区切文字に気を配った。
ダメだった。
おなじディレクトリに配置
exeとおなじディレクトリにlibstdc++-6.dll
ファイルを配置した。
__gxx_personality_v0
再度exe実行するも、ふたたびエラー。
「エントリポイントが見つかりません」 「プロシージャエントリポイント __gxx_personality_v0 がダイナミックリンクライブラリ libstdc++-6.dll から見つかりませんでした。」
ほかのDLLもおなじディレクトリに配置
C:/tools/mingw32/bin
にあるほかのDLLも配置するも同様のエラー。
所感
すんなり行くとは思っていなかったよ…。まだ試す余地はある。