やってみる

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

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

前回のつづき。ソースコードを変えて試すも失敗。

ErrorDialog

exeを実行してもエラーダイアログが出る。前回と同じ。

参考

https://developer.gnome.org/gtkmm-tutorial/unstable/gtkmm-tutorial.html

ソースコード

simple.cc

#include <gtkmm.h>

int main(int argc, char *argv[])
{
  auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
  Gtk::Window window;
  window.set_default_size(200, 200);
  return app->run(window);
}

compile.bat

g++ simple.cc -o simple `pkg-config gtkmm-3.0 --cflags --libs`

コンパイルエラー

simple.cc: In function 'int main(int, char**)':
simple.cc:5:8: error: 'app' does not name a type
   auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
        ^
simple.cc:8:10: error: 'app' was not declared in this scope
   return app->run(window);
          ^
mingw32-make: *** [simple] Error 1

error: 'app' does not name a typeというメッセージから察するに、auto型が使えないっぽい。

コードを以下のように修正。

ソースコード 2版

#include <gtkmm.h>

int main(int argc, char *argv[])
{
  //auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
  Glib::RefPtr< Gtk::Application > app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
  Gtk::Window window;
  window.set_default_size(200, 200);
  return app->run(window);
}

実行エラー

コンパイル成功。しかし実行時にエラーダイアログが出る。

エラーは前回と同様。

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

ErrorDialog

g++ 2版

こちらを参考に、参照するパスを変更するも同様のエラー。

simple: simple.cc
    g++ -std=c++11 -Wl,-rpath=C:/tools/mingw32/bin -o simple.exe simple.cc `pkg-config gtkmm-3.0 --cflags --libs` -mwindows 
#   g++ -o simple.exe simple.cc `pkg-config gtkmm-3.0 --cflags --libs` -mwindows

ちなみに、-std=c++11コンパイルするとauto型が使えた。 しかし、実行エラーは出る。

ソースコード 3版

#include <gtkmm.h>

int main(int argc, char *argv[])
{
  auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
  //Glib::RefPtr< Gtk::Application > app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
  Gtk::Window window;
  window.set_default_size(200, 200);
  return app->run(window);
}

所感

ソースコードの問題ではないっぽい。

次回はエラーの原因を考えてみる。