尝试构建非常简单的gtkmm应用程序时编译器错误:

时间:2013-06-27 02:36:22

标签: c++ include gtk gtkmm codelite

我使用aptitude在Ubuntu 13.04上安装了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"'
----------Building project:[ CalendarsGUI - Debug ]----------
........

/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
In file included from //usr/include/glib-2.0/glib/gtypes.h:36:0,
                 from //usr/include/glib-2.0/glib/galloca.h:34,
                 from //usr/include/glib-2.0/glib.h:32,
                 from /usr/include/glibmm-2.4/glibmm/thread.h:46,
                 from /usr/include/glibmm-2.4/glibmm.h:87,
                 from /usr/include/gtkmm-3.0/gtkmm.h:87,
                 from main.cpp:16:
***//usr/include/glib-2.0/glib/gversionmacros.h:179:2: error: #error "GLIB_VERSION_MIN_REQUIRED must be >= GLIB_VERSION_2_26"***
In file included from //usr/include/glib-2.0/glib/galloca.h:34:0,
                 from //usr/include/glib-2.0/glib.h:32,
                 from /usr/include/glibmm-2.4/glibmm/thread.h:46,
                 from /usr/include/glibmm-2.4/glibmm.h:87,
                 from /usr/include/gtkmm-3.0/gtkmm.h:87,
                 from main.cpp:16:
***//usr/include/glib-2.0/glib/gtypes.h:448:2: error: #error unknown ENDIAN type
.......
make: *** [All] Error 2
2 errors, 2 warnings***

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

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

2 个答案:

答案 0 :(得分:4)

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

右键点击您的项目:设置 - &gt;常用设置 - &gt;编译器 - &gt; C ++编译器选项: 并添加:

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

如果您有其他选择,则应采用分号分隔

接下来,将以下内容添加到链接器选项: 右键单击您的项目:设置 - &gt;常用设置 - &gt;链接器 - &gt;选项:

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

再次,如果你有其他选择,它们应该是以分号分隔的

删除上面添加的所有硬编码包含路径2应该足够

注意:

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

叶兰

答案 1 :(得分:3)

不要使用包含,而是使用 pkg-config

g++ foo.cc -o foo `pkg-config gtkmm-3.0 --cflags --libs`
不过,你的例子编译并运行得很好。