gtkmm 未定义引用某些 gtk::builder 函数 add_from_file

gtkmm undefined reference to certain gtk::builder function add_from_file

我正在使用 eclipse、mingw-w64、gtkmm2.4、glade 来编译一些简单的程序。

我可以编译hello world gtkmm examples,按照教程来,但是当涉及到glade时出现了一个有点奇怪的undefined to error。

顺利编译运行的程序,就是gtkmm 2.24简单实例教程https://developer.gnome.org/gtkmm-tutorial/2.24/sec-basics-simple-example.html.en

#include <gtkmm.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);
    Gtk::Window window;
    Gtk::Main::run(*window);
    return 0;
}

然而,当我尝试 运行 空地章节 (24.2.1) 中的另一个简单示例时,事情并没有成功。

https://developer.gnome.org/gtkmm-tutorial/2.24/sec-builder-accessing-widgets.html.en 示例:

#include <gtkmm.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);
    //Gtk::Window window; //I changed it to fit with the glade example

    Gtk::Window* window;  //I changed this line from the example

    //////////////// this part was pretty much just copied out from the example//////
    Glib::RefPtr<Gtk::Builder> refBuilder = Gtk::Builder::create();
    try
      {
        refBuilder->add_from_file("something.glade"); //this is the line with problem.
      }
      catch(const Glib::FileError& ex)
      {
        std::cerr << "FileError: " << ex.what() << std::endl;
        return 1;
      }
      catch(const Gtk::BuilderError& ex)
      {
        std::cerr << "BuilderError: " << ex.what() << std::endl;
        return 1;
      }
    refBuilder->get_widget("window1", window);
    //////////////// end of copied out from the example//////

    Gtk::Main::run(*window);
    return 0;
}

编译时报错如下 test.cpp:(.text.startup+0x281): undefined reference to Gtk::Builder::add_from_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

它似乎将参数 "something.glade" 作为类型 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&(我不知道它是什么)。

根据 gtkmm 手册(https:developer.gnome.org/gtkmm/stable/classGtk_1_1Builder.html#aa3f4af4e7eaf7861c8283dc0dbd5254c)似乎只需要 Gtk::Builder::add_from_file(const std::string & filename)。那么参数类型真的是问题所在吗?

我尝试通过 std::string()string() 将其转换为 std::string,但它给出了相同的错误。

我已经尝试注释掉有问题的行,并且编译正常。

所以现在我正在为这个看似微不足道的问题绞尽脑汁。请提供一些帮助。

更多信息

似乎 解决了。

#define _GLIBCXX_USE_CXX11_ABI 0放在开始因为我使用的是gcc 5.