在 Debian 上编译 GTK 3 应用程序

Compiling GTK 3 apps on Debian

我正在尝试在我的 Debian 桌面上编译一个 GTK 程序。我安装了 libgtk-3-dev 和所有这些,但是当我去编译程序时,我得到这个错误:

$ gcc -o client client.c `pkg-config --cflags --libs glib-2.0`
client.c:6:10: fatal error: gtk/gtk.h: No such file or directory
    6 | #include <gtk/gtk.h>
      |          ^~~~~~~~~~~
compilation terminated.

所有 GTK headers 实际上似乎都在 /usr/include/gtk-3.0 中,但即使我包含 <gtk-3.0/gtk/gtk.h> 我也会出错,因为里面的文件包含其他 GTK headers 就好像它们在正常的包含路径中一样。然后,如果我用 -I/usr/include/gtk-3.0 编译,我仍然会出错,这次是关于 glib 的。好吧,glib 文件在 /usr/include/glib-2.0 里面,这是和以前一样的问题。最后,如果我用 -I/usr/include/gtk-3.0 -I/usr/include/glib-2.0 编译,这次我会得到这个错误:

$ gcc -o client -I/usr/include/gtk-3.0 -I/usr/include/glib-2.0 client.c `pkg-config --cflags $ --libs glib-2.0`
In file included from /usr/include/gtk-3.0/gdk/gdkapplaunchcontext.h:30,
                 from /usr/include/gtk-3.0/gdk/gdk.h:32,
                 from /usr/include/gtk-3.0/gtk/gtk.h:30,
                 from client.c:6:
/usr/include/gtk-3.0/gdk/gdktypes.h:35:10: fatal error: pango/pango.h: No such file or directory
   35 | #include <pango/pango.h>
      |          ^~~~~~~~~~~~~~~
compilation terminated.

似乎是我选择的编译标志的任意组合,我得到了某种错误,所有这些都是由于 Debian 将 headers 放在 non-standard 子目录中引起的。这不是我在惹他们,这是 apt 为我安装的。

您要 pkg-config 获取 glib,您必须 pkg-config 获取 GTK+ 库:

gcc -o client client.c `pkg-config --cflags --libs gtk+-3.0`

您可以在命令行中保留 glib-2.0,但由于 GTK+ 依赖于 glib,因此它已经包含在命令行中。