やってみる

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

MinGWでHelloWorld(Gtkmm3版)に失敗した

Gtkmm3をMinGWコンパイルはできたが、exe実行時にエラーダイアログが出て実行できない。

__gxx_personality_v0

開発環境

ライブラリ

  • GTK+3
  • GTKmm3
    • 以前コンパイルしてできたDLL
      • libatkmm-1.6-1.dll
      • libcairomm-1.0-1.dll
      • libgdkmm-3.0-1.dll
      • libgiomm-2.4-1.dll
      • libglibmm-2.4-1.dll
      • libglibmm_generate_extra_defs-2.4-1.dll
      • libgtkmm-3.0-1.dll
      • libpangomm-1.4-1.dll
      • libsigc-2.0-0.dll

上記の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\binC:\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 から見つかりませんでした。」

ZNKSt7_cxx1112basic_stringIcSt11char_traitsIcESaIcEE2atEj

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 から見つかりませんでした。」

__gxx_personality_v0

ほかのDLLもおなじディレクトリに配置

C:/tools/mingw32/binにあるほかのDLLも配置するも同様のエラー。

所感

すんなり行くとは思っていなかったよ…。まだ試す余地はある。