2009-06-24 49 views
4

我试图建立使用GTK,它包括一个线的hello world:头文件(例如GTK/gtk.h VS GTK-2.0/GTK/gtk.h)

#include <gtk/gtk.h> 

如你会期待的。

的Makefile文件提供有行:

GTK_INCLUDE = -I/usr/local/include 

所以希望找到gtk.h在/usr/local/include/gtk/gtk.h。但是在我的系统中,它位于/usr/local/include/gtk-2.0/gtk/gtk.h中,即在版本的子目录中。

显然在这种情况下,我可以在Makefile中添加-I/usr/local/include/gtk-2.0,但同样的问题也会影响gtk.h的依赖关系等等。

有没有处理这个问题的好方法?可以使用configure来定位头文件的位置并添加相应的include目录吗?我几乎不知道配置,但似乎在构建时发现了系统的一些事情,这正是我所追求的。

这是一个常见的发生或我有一些怪胎目录结构这是真正的问题?

感谢您的指点!

+0

重复:http://stackoverflow.com/questions/510098 – ephemient 2009-06-25 02:01:57

回答

8

您需要使用pkg-config获得包括路径:

$ pkg-config --cflags gtk+-2.0 
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 

你也必须使用它来获取库:

$ pkg-config --libs gtk+-2.0 
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 

(在这些命令的输出会有所不同您的分配,并将永远是您的分配正确的。)

+0

谢谢,这看起来像我之后 - 我认识到其他一些包括你的pkg-config示例创建(像pango)需要一个更具体的包含目录。 – Ray2k 2009-06-25 06:04:06

4

也许,你必须创建一个类似的符号链接:

ln -s /usr/local/include/gtk /usr/local/include/gtk-2.0 

,但是你可以先尝试重新安装GTK包。

+1

我曾想过这个,但它没有eem做正确的事情,特别是考虑其他所有需要以相同方式改变的事情。 – Ray2k 2009-06-25 05:59:25

2

我很久没有使用过gtk了,但是这种方式在Linux中通常处理的方式是有一个名为packagename-config(在这种情况下,可能是gtk-config)的脚本,它附带了开发头文件,你的makefile应该调用这个函数,以便分别使用--cflags和--libs来获得包的正确包含路径和链接器标志。

所以尝试像

GTK_INCLUDE=`gtk-config --cflags` 

(请注意使用反引号,而不是单引号)

而且你可能也想的gtk-config --libs输出添加到您的LDFLAGS,以确保您链接所有正确的东西。

+1

很久以前,AFAIR,gtk-config已经被通用的pkg-config所取代(正如packagename-config样式脚本的大部分其他用法一样)。 – CesarB 2009-06-24 22:51:00