【问题标题】:virtual noexcept(true) errors: MinGW and gtkmm虚拟 noexcept(true) 错误:MinGW 和 gtkmm
【发布时间】:2015-09-29 22:24:54
【问题描述】:

为了在 Windows 上使用 MinGW 构建 //working// C++/gtkmm-3.0 应用程序,我已经奋斗了一个月。我终于设法让库、MinGW 和 Codeblocks 在 Windows XP (VirtualBox) 上相处融洽。但是,当我尝试构建时,出现以下错误。

这些是 gtkmm-3.0 和依赖项的最新版本。我通过 MSYS2 获得了它们,尽管由于未知原因我无法在该环境中构建。因此,正如经常推荐的那样,我将它们复制到 MinGW /lib/include 目录,并确保 pkg-config 可以找到它们。一切都很好(据称)。

显然,这些问题并非源自我的代码。我没有编写或修改 gtkmm。然而,我不能让这些消失。

值得一提的是,我最后一次收到与“找不到 glib::ustring::ustring”有关的错误,它决定停止抱怨,而是突然给我这些。如果之前的消息再次出现,我会在这里发布。

我开始认为在 Windows 上发布这个软件根本不值得。

注意:我得到了超过 50 个,全部在 gtkmm-3.0 及其依赖库中,都来自 main 的第 1 行或第 2 行,并且都具有完全相同的细节。我将只展示一些对空间感兴趣的内容。

-------------- Build: Debug in infiltrator (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -std=c++11 -Wall -mms-bitfields -pthread -IC:/dev/MinGW/include/glibmm-2.4 -IC:/dev/MinGW/lib/glibmm-2.4/include -IC:/dev/MinGW/include/sigc++-2.0 -IC:/dev/MinGW/lib/sigc++-2.0/include -IC:/dev/MinGW/include/glib-2.0 -IC:/dev/MinGW/lib/glib-2.0/include -IC:/dev/MinGW/include/gtkmm-3.0 -IC:/dev/MinGW/lib/gtkmm-3.0/include -IC:/dev/MinGW/include/atkmm-1.6 -IC:/dev/MinGW/include/giomm-2.4 -IC:/dev/MinGW/lib/giomm-2.4/include -IC:/dev/MinGW/include/pangomm-1.4 -IC:/dev/MinGW/lib/pangomm-1.4/include -IC:/dev/MinGW/include/gtk-3.0 -IC:/dev/MinGW/include/cairomm-1.0 -IC:/dev/MinGW/lib/cairomm-1.0/include -IC:/dev/MinGW/include/gdk-pixbuf-2.0 -IC:/dev/MinGW/include/gdkmm-3.0 -IC:/dev/MinGW/lib/gdkmm-3.0/include -IC:/dev/MinGW/include/atk-1.0 -IC:/dev/MinGW/include/pango-1.0 -IC:/dev/MinGW/include/cairo -IC:/dev/MinGW/include/pixman-1 -IC:/dev/MinGW/include -I/mingw32/include/freetype2 -I/mingw32/include/libpng16 -I/mingw32/include/harfbuzz -I/mingw32/include/glib-2.0 -I/mingw32/lib/glib-2.0/include -I/mingw32/include -IC:/dev/MinGW/include/freetype2 -IC:/dev/MinGW/include/libpng16 -IC:/dev/MinGW/include/harfbuzz -Wl,-luuid -LC:/dev/MinGW/lib -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lgtk-3 -lglibmm-2.4 -lcairomm-1.0 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -lwinmm -lz -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lsigc-2.0 -lgobject-2.0 -lglib-2.0 -lintl -std=c++11 -Wall -g -mms-bitfields -pthread -IC:/dev/MinGW/include/glibmm-2.4 -IC:/dev/MinGW/lib/glibmm-2.4/include -IC:/dev/MinGW/include/sigc++-2.0 -IC:/dev/MinGW/lib/sigc++-2.0/include -IC:/dev/MinGW/include/glib-2.0 -IC:/dev/MinGW/lib/glib-2.0/include -IC:/dev/MinGW/include/gtkmm-3.0 -IC:/dev/MinGW/lib/gtkmm-3.0/include -IC:/dev/MinGW/include/atkmm-1.6 -IC:/dev/MinGW/include/giomm-2.4 -IC:/dev/MinGW/lib/giomm-2.4/include -IC:/dev/MinGW/include/pangomm-1.4 -IC:/dev/MinGW/lib/pangomm-1.4/include -IC:/dev/MinGW/include/gtk-3.0 -IC:/dev/MinGW/include/cairomm-1.0 -IC:/dev/MinGW/lib/cairomm-1.0/include -IC:/dev/MinGW/include/gdk-pixbuf-2.0 -IC:/dev/MinGW/include/gdkmm-3.0 -IC:/dev/MinGW/lib/gdkmm-3.0/include -IC:/dev/MinGW/include/atk-1.0 -IC:/dev/MinGW/include/pango-1.0 -IC:/dev/MinGW/include/cairo -IC:/dev/MinGW/include/pixman-1 -IC:/dev/MinGW/include -I/mingw32/include/freetype2 -I/mingw32/include/libpng16 -I/mingw32/include/harfbuzz -I/mingw32/include/glib-2.0 -I/mingw32/lib/glib-2.0/include -I/mingw32/include -IC:/dev/MinGW/include/freetype2 -IC:/dev/MinGW/include/libpng16 -IC:/dev/MinGW/include/harfbuzz -Wl,-luuid -LC:/dev/MinGW/lib -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lgtk-3 -lglibmm-2.4 -lcairomm-1.0 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -lwinmm -lz -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lsigc-2.0 -lgobject-2.0 -lglib-2.0 -lintl -std=c++11 -mms-bitfields -pthread -IC:/dev/MinGW/include/glibmm-2.4 -IC:/dev/MinGW/lib/glibmm-2.4/include -IC:/dev/MinGW/include/sigc++-2.0 -IC:/dev/MinGW/lib/sigc++-2.0/include -IC:/dev/MinGW/include/glib-2.0 -IC:/dev/MinGW/lib/glib-2.0/include -IC:/dev/MinGW/include/gtkmm-3.0 -IC:/dev/MinGW/lib/gtkmm-3.0/include -IC:/dev/MinGW/include/atkmm-1.6 -IC:/dev/MinGW/include/giomm-2.4 -IC:/dev/MinGW/lib/giomm-2.4/include -IC:/dev/MinGW/include/pangomm-1.4 -IC:/dev/MinGW/lib/pangomm-1.4/include -IC:/dev/MinGW/include/gtk-3.0 -IC:/dev/MinGW/include/cairomm-1.0 -IC:/dev/MinGW/lib/cairomm-1.0/include -IC:/dev/MinGW/include/gdk-pixbuf-2.0 -IC:/dev/MinGW/include/gdkmm-3.0 -IC:/dev/MinGW/lib/gdkmm-3.0/include -IC:/dev/MinGW/include/atk-1.0 -IC:/dev/MinGW/include/pango-1.0 -IC:/dev/MinGW/include/cairo -IC:/dev/MinGW/include/pixman-1 -IC:/dev/MinGW/include -I/mingw32/include/freetype2 -I/mingw32/include/libpng16 -I/mingw32/include/harfbuzz -I/mingw32/include/glib-2.0 -I/mingw32/lib/glib-2.0/include -I/mingw32/include -IC:/dev/MinGW/include/freetype2 -IC:/dev/MinGW/include/libpng16 -IC:/dev/MinGW/include/harfbuzz -Iinclude -IC:\dev\MinGW\include -c "C:\Documents and Settings\Jason\Desktop\infiltrator\main.cpp" -o obj\Debug\main.o
In file included from C:/dev/MinGW/include/pangomm-1.4/pangomm/fontset.h:33:0,
                 from C:/dev/MinGW/include/pangomm-1.4/pangomm/context.h:37,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/widget.h:32,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/actiongroup.h:29,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/application.h:32,
                 from C:\Documents and Settings\Jason\Desktop\infiltrator\main.cpp:2:
C:/dev/MinGW/include/pangomm-1.4/pangomm/font.h:98:11: error: looser throw specifier for 'virtual Pango::Font::~Font()'
In file included from C:/dev/MinGW/include/glibmm-2.4/glibmm/binding.h:23:0,
                 from C:/dev/MinGW/include/glibmm-2.4/glibmm.h:96,
                 from C:\Documents and Settings\Jason\Desktop\infiltrator\main.cpp:1:
C:/dev/MinGW/include/glibmm-2.4/glibmm/object.h:117:11: error:   overriding 'virtual Glib::Object::~Object() noexcept (true)'
In file included from C:/dev/MinGW/include/pangomm-1.4/pangomm/context.h:37:0,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/widget.h:32,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/actiongroup.h:29,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/application.h:32,
                 from C:\Documents and Settings\Jason\Desktop\infiltrator\main.cpp:2:
C:/dev/MinGW/include/pangomm-1.4/pangomm/fontset.h:81:11: error: looser throw specifier for 'virtual Pango::Fontset::~Fontset()'
In file included from C:/dev/MinGW/include/glibmm-2.4/glibmm/binding.h:23:0,
                 from C:/dev/MinGW/include/glibmm-2.4/glibmm.h:96,
                 from C:\Documents and Settings\Jason\Desktop\infiltrator\main.cpp:1:
C:/dev/MinGW/include/glibmm-2.4/glibmm/object.h:117:11: error:   overriding 'virtual Glib::Object::~Object() noexcept (true)'
In file included from C:/dev/MinGW/include/pangomm-1.4/pangomm/fontfamily.h:34:0,
                 from C:/dev/MinGW/include/pangomm-1.4/pangomm/fontmap.h:36,
                 from C:/dev/MinGW/include/pangomm-1.4/pangomm/context.h:38,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/widget.h:32,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/actiongroup.h:29,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/application.h:32,
                 from C:\Documents and Settings\Jason\Desktop\infiltrator\main.cpp:2:
C:/dev/MinGW/include/pangomm-1.4/pangomm/fontface.h:81:11: error: looser throw specifier for 'virtual Pango::FontFace::~FontFace()'
In file included from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/widget.h:41:0,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/actiongroup.h:29,
                 from C:/dev/MinGW/include/gtkmm-3.0/gtkmm/application.h:32,
                 from C:\Documents and Settings\Jason\Desktop\infiltrator\main.cpp:2:
C:/dev/MinGW/include/gtkmm-3.0/gtkmm/buildable.h:107:11: error: looser throw specifier for 'virtual Gtk::Buildable::~Buildable()'
Process terminated with status 1 (0 minute(s), 6 second(s))
50 error(s), 0 warning(s) (0 minute(s), 6 second(s))

除了 gtkmm 之外,这种类型的错误消息似乎会在 Windows 上构建的其他稳定的、工作的项目和库中弹出。

我的最佳猜测是我忘记了一些编译器标志、设置或构建过程中其他非常明显的步骤。我会赶紧提醒读者我在 CodeBlocks (13.14) 上,所以我没有自己编写那个构建命令。


要求的信息 mingw32-g++.exe --version

mingw32-g++.exe (tdm-1) 4.7.1

这是与 CodeBlocks 13.14 捆绑在一起的版本。

...

我会尽快提醒大家,我没有编写 gtkmm 或其依赖项的任何方面,这是所有这些错误的根源。此外,这是一个完全稳定的版本,而不是测试版或开发快照。其次,这个完全相同的代码在我的 Linux 版本上使用完全相同的库版本

也就是说,这里是来自请求位置的完整代码行。

C:/dev/MinGW/include/glibmm-2.4/glibmm/object.h,第 117 行

virtual ~Object() noexcept; //It should only be deleted by the callback.

C:/dev/MinGW/include/pangomm-1.4/pangomm/font.h,第 98 行

virtual ~Font();

【问题讨论】:

  • 您能否将virtual Glib::Object::~Object() 的完整声明发布在您的C:/dev/MinGW/include/glibmm-2.4/glibmm/object.h 第117 行以及'virtual Pango::Font::~Font() 的完整声明,因为它出现在您的C:/dev/MinGW/include/pangomm-1.4/pangomm/font.h 第98 行。
  • 还有mingw32-g++.exe --version的输出
  • 将该信息添加到我的问题底部。谢谢你看这个。 :)

标签: c++ windows build mingw gtkmm


【解决方案1】:

你的 g++ 版本对于这段代码来说太旧了:4.7.x 有一个半生不熟的方式 显式和隐含异常规范的协调 在继承的成员函数之间,如本例中的虚函数之间 Glib::ObjectPango::Font 的析构函数。

您需要至少升级到 GCC 4.8.1 - 这恰好是 MinGW 的最新稳定版本。您可以及时了解最新信息 来自TDM 的 GCC 的 Windows 端口。最新的 有5.1

附:我有点怀疑你有没有 真正同步的glibmm-2.4pangomm-1.4 的构建。我有 这些软件包的来源都是我的 linux 发行版(Ubuntu 15.04)的官方来源,而且我询问的样本问题声明的行号与您的不同,而且它们都没有noexcept 规范,这肯定避免了障碍。

【讨论】:

  • 太棒了!我会检查这两个。因为我知道构建环境的文件夹结构,所以我应该可以毫无问题地升级它。我还将仔细检查glibmm-2.4pangomm-1.4,我将不得不通过我的 MSYS2 再次将其拉下。一旦所有这些都完成并除尘,我想我会制作一个安装程序来创建该构建环境文件夹,并让其他人为这个版本的 gtkmm 头疼!
  • 您可以简单地独立于 Code::Blocks 安装另一个 GCC 工具链(除了或代替您拥有的工具链)。它与捆绑的工具链没有必要的绑定。您可以将 C::B 配置为支持尽可能多的编译器并自行选择。
  • 哦,是的,我知道。我刚刚将所有内容都设置在一个文件中。无论如何,我不妨在这个设置中替换旧版本的 MinGW,因为它对我来说真的没有任何用途。我的大部分构建都依赖于<library>mm 的东西。实际上,我从 CodeBlocks 安装中拉出 MinGW 目录,将其移动到 C:\dev,然后将我所有的库放在 \bin\lib\include 中。大量节省时间。 :)
  • 我明天会试试这个,顺便告诉你进展如何。如果它解决了它(它可能会),我会接受。 :)
  • 解决了这批错误。我正在完全编译..但没有运行。现在我的问题与此错误消息有关:stackoverflow.com/q/17410718/472647。所以我必须弄清楚什么需要重建,如何以及为什么。 :'(
猜你喜欢
  • 1970-01-01
  • 2011-05-16
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 2016-09-20
  • 1970-01-01
相关资源
最近更新 更多