【问题标题】:Compiler Errors when trying to build very simple gtkmm app:尝试构建非常简单的 gtkmm 应用程序时出现编译器错误:
【发布时间】:2013-06-24 09:26:58
【问题描述】:

我在 Ubuntu 13.04 上使用 aptitude 安装了 gtkmm 3(我喜欢 aptitude,因为它会记住您要删除时安装的内容):

sudo aptitude install libgtkmm-3.0-dev --with-recommends

使用 codelite 5.1.2 和默认的 gtk++ 工具链,在我的编译器中包含我添加的路径:

/usr/include/gtkmm-3.0 - gtkmm.h 的路径

我尝试在使用 GTKMM 编程中构建第一个示例应用程序:

#include <gtkmm.h>
int main ( int argc, char *argv[] )
{

    Gtk::Main kit ( argc, argv );
    Gtk::Window window;
    Gtk::Main::run ( window );
    return 0;

}

在查找了来自 gtkmm.h(包括整个 gtkmm 框架)的一些“未找到包含文件”错误之后,我的编译器包含路径现在如下所示:

/usr/include/gtkmm-3.0
/usr/include/glibmm-2.4
/usr/lib/i386-linux-gnu/glibmm-2.4/include
/usr/include/glib-2.0

所有的地狱都从 glib.h 中解脱出来:

/bin/sh -c 'make -j 4 -e -f "Calendars_wsp.mk"' ----------构建项目:[CalendarsGUI - 调试]---------- ........... /gtkmm-3.0 -I/usr/include/glibmm-2.4 -I/usr/lib/i386-linux-gnu/glibmm-2.4/include -I//usr/include/glib-2.0 在 //usr/include/glib-2.0/glib/gtypes.h:36:0 包含的文件中, 来自 //usr/include/glib-2.0/glib/galloca.h:34, 来自 //usr/include/glib-2.0/glib.h:32, 来自 /usr/include/glibmm-2.4/glibmm/thread.h:46, 来自 /usr/include/glibmm-2.4/glibmm.h:87, 从 /usr/include/gtkmm-3.0/gtkmm.h:87, 来自 main.cpp:16: ***//usr/include/glib-2.0/glib/gversionmacros.h:179:2: 错误:#error "GLIB_VERSION_MIN_REQUIRED 必须 >= GLIB_VERSION_2_26"*** 在 //usr/include/glib-2.0/glib/galloca.h:34:0 包含的文件中, 来自 //usr/include/glib-2.0/glib.h:32, 来自 /usr/include/glibmm-2.4/glibmm/thread.h:46, 来自 /usr/include/glibmm-2.4/glibmm.h:87, 从 /usr/include/gtkmm-3.0/gtkmm.h:87, 来自 main.cpp:16: ***//usr/include/glib-2.0/glib/gtypes.h:448:2: error: #error unknown ENDIAN type ………… make: *** [全部] 错误 2 2 个错误,2 个警告***

(我在尝试使用 gtkmm 2.4 时也遇到了同样的问题)

显然我在这里遗漏了一些东西。我究竟做错了什么?我还需要做什么来构建 gtkmm 项目?

【问题讨论】:

  • 这条错误信息对我来说似乎很清楚:#error "GLIB_VERSION_MIN_REQUIRED must be >= GLIB_VERSION_2_26",而且您似乎只安装了 2.0 版的 glib。
  • 看来你是对的 - 但我根据 GTKMM 网站上的说明安装了 3.0,而 glib.h 的唯一版本似乎是我所拥有的。 GTKMM 文档确实说安装的版本并不总是与他们发布的实际代码库同步。
  • @JoachimPileborg - 似乎我并不孤单。在 SE/AskUbuntu 上有很多类似的问题。他们说 Unity 似乎与 gtkmm 相处得不太好......顺便说一句,感谢您的编辑。

标签: c++ include gtk gtkmm codelite


【解决方案1】:

使用 gtkmm 时,建议使用 pkg-config 工具。 您也可以从 codelite 执行此操作:

右击你的项目:设置->通用设置->编译器->C++编译器选项: 并添加:

$(shell pkg-config gtkmm-3.0 --cflags)

如果您有其他选项,它们应该用分号分隔

接下来,将以下内容添加到链接器选项中: 右键单击您的项目:设置 -> 通用设置 -> 链接器 -> 选项:

$(shell pkg-config gtkmm-3.0 --libs)

同样,如果您有其他选择,它们应该用分号分隔

删除您在上面添加的所有硬编码包含路径 2 就足够了

注意:

codelite 的论坛也回答了这个确切的问题: http://forums.codelite.org/viewtopic.php?f=11&t=1396&p=6416&hilit=gtkmm#p6410

伊兰

【讨论】:

  • 我看到 codelite 中的创建新项目对话框提供了创建 gtkmm 项目并自动添加这些标志的选项。
【解决方案2】:

不要摆弄包含,使用 pkg-config 代替:

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

顺便说一句,您的示例编译并运行得很好。

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多