首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子目录中的头文件(例如gtk/gtk.h与gtk-2.0/gtk/gtk.h)

子目录中的头文件(例如gtk/gtk.h与gtk-2.0/gtk/gtk.h)
EN

Stack Overflow用户
提问于 2009-06-24 21:15:26
回答 3查看 9.3K关注 0票数 4

我正在尝试使用GTK构建一个hello world,其中包含以下代码:

代码语言:javascript
复制
#include <gtk/gtk.h>

如你所料。

提供的Makefile包含以下行:

代码语言:javascript
复制
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可以用来定位头文件的位置并添加适当的包含目录吗?我对配置几乎一无所知,但它似乎能在构建时找到关于系统的信息,这正是我所追求的。

这是一种常见现象,还是我有某种奇怪的目录结构,这才是真正的问题所在?

谢谢你的指点!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-24 22:48:28

您需要使用pkg-config来获取包含路径:

代码语言:javascript
复制
$ 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

您还必须使用它来获取库:

代码语言:javascript
复制
$ 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

(这些命令的输出将根据您的发行版而有所不同,并且始终是您的发行版的正确输出。)

票数 8
EN

Stack Overflow用户

发布于 2009-06-24 21:22:05

您可能必须创建一个符号链接,如下所示:

代码语言:javascript
复制
ln -s /usr/local/include/gtk /usr/local/include/gtk-2.0

但是您可以首先尝试重新安装GTK包。

票数 4
EN

Stack Overflow用户

发布于 2009-06-24 21:53:59

我很久没有使用gtk了,但是在Linux中通常的处理方式是有一个名为packagename-config (在本例中可能是gtk-config)的脚本,该脚本随开发头一起提供,您的makefile应该调用该脚本,以便分别使用--cflag和--libs为包获取正确的包含路径和链接器标志。

所以试试像这样的东西

代码语言:javascript
复制
GTK_INCLUDE=`gtk-config --cflags`

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

您可能还想将gtk-config --libs的输出添加到您的LDFLAGS中,以确保链接到所有正确的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1041059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档