在子目录中的头文件(例如GTK / gtk.h VS GTK-2.0 / GTK / gtk.h)(

2019-09-16 23:18发布

我试图建立使用GTK,其中包括线上一个Hello World:

#include <gtk/gtk.h>

正如你所期望。

供给的生成文件具有行:

GTK_INCLUDE = -I/usr/local/include

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

显然,在这种情况下,我可以添加-I在/ usr /本地/包括/ GTK的2.0 Makefile文件,但同样的问题作物了gtk.h的依赖等。

是否有处理这个问题的好办法? 可以配置用于定位在头文件并添加相应的include目录? 我知道旁边的一无所知配置,但它似乎摸透系统在构建时,这是我追求的东西。

这是经常发生的事情还是我有一些反常的目录结构,它是真正的问题?

感谢您的指点!

Answer 1:

您需要使用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

(这些命令的输出将根据您的分布有所不同,而且将永远是你的分配正确的。)



Answer 2:

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

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

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



Answer 3:

我没有在很长一段时间使用GTK,但这是在Linux中通常的处理方式是,有一个脚本调用的包名,配置(在这种情况下,可能GTK的配置),其自带的开发头文件,它生成文件应该为了得到正确的调用包括包路径和连接器选项,使用--cflags分别--libs。

因此,尝试像

GTK_INCLUDE=`gtk-config --cflags`

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

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



文章来源: Header files in subdirectories (e.g. gtk/gtk.h vs gtk-2.0/gtk/gtk.h)