我正在尝试使用GTK构建一个hello world,其中包含以下代码:
#include <gtk/gtk.h>如你所料。
提供的Makefile包含以下行:
GTK_INCLUDE = -I/usr/local/include因此,它期望在/usr/local/include/gtk/gtk.h中找到gtk.h。但是在我的系统上,它位于/usr/local/include/gtk-2.0/gtk/gtk.h,即一个版本化的子目录中。
显然,在这种情况下,我可以将-I/usr/local/include/gtk-2.0添加到Makefile中,但是gtk.h的依赖关系等也会出现同样的问题。
有没有解决这个问题的好办法?configure可以用来定位头文件的位置并添加适当的包含目录吗?我对配置几乎一无所知,但它似乎能在构建时找到关于系统的信息,这正是我所追求的。
这是一种常见现象,还是我有某种奇怪的目录结构,这才是真正的问题所在?
谢谢你的指点!
发布于 2009-06-24 22:48:28
您需要使用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(这些命令的输出将根据您的发行版而有所不同,并且始终是您的发行版的正确输出。)
发布于 2009-06-24 21:22:05
您可能必须创建一个符号链接,如下所示:
ln -s /usr/local/include/gtk /usr/local/include/gtk-2.0但是您可以首先尝试重新安装GTK包。
发布于 2009-06-24 21:53:59
我很久没有使用gtk了,但是在Linux中通常的处理方式是有一个名为packagename-config (在本例中可能是gtk-config)的脚本,该脚本随开发头一起提供,您的makefile应该调用该脚本,以便分别使用--cflag和--libs为包获取正确的包含路径和链接器标志。
所以试试像这样的东西
GTK_INCLUDE=`gtk-config --cflags`(注意使用反引号,而不是撇号)
您可能还想将gtk-config --libs的输出添加到您的LDFLAGS中,以确保链接到所有正确的内容。
https://stackoverflow.com/questions/1041059
复制相似问题