如何使用 pkg-config 在 C 中编译 GTK4 项目?

How can i compile GTK4 project in C with pkg-config?

提问人:weuoimi 提问时间:11/11/2023 更新时间:11/11/2023 访问量:45

问:

最近我尝试为取自 https://www.gtk.org/docs/getting-started/hello-world/ 的 GTK4 库编译 C 代码

我使用的操作系统是 Debian 12。

问题是我使用的命令

gcc $(pkg-config --cflags gtk4) -o hello-world-gtk main.c $(pkg-config --libs gtk4)

以及以下 CMake 代码

find_package(PkgConfig REQUIRED)
pkg_search_module(GTK REQUIRED IMPORTED_TARGET gtk4)

返回相同的错误:

#include <gtk/gtk.h> not found `

但是 gtk.h 文件存在于 /usr/include/gtk-4.0/gtk/gtk.h 中 所以我试过了

$ pkg-config --cflags gtk4
-I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/x86_64-linux-gnu -I/usr/include/graphene-1.0 -I/usr/lib/x86_64-linux-gnu/graphene-1.0/include -mfpmath=sse -msse -msse2 -pthread 

$ pkg-config --libs gtk4
-lgtk-4 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgraphene-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 

$ gcc -I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/x86_64-linux-gnu -I/usr/include/graphene-1.0 -I/usr/lib/x86_64-linux-gnu/graphene-1.0/include -mfpmath=sse -msse -msse2 -pthread -o hello-world-gtk main.c -lgtk-4 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgraphene-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

它编译成功。

那我做错了什么?请帮我解开这个谜团,我完全对这个谜团感到困惑。

c cmake debian gtk pkg-config

评论

0赞 dandev486 11/12/2023
似乎情况并非如此,因为您有头文件,但是您是否已经安装并在您运行时(作为超级用户)列出了它?我也在运行 Debian Bookworm,但无法重现该问题。随着时间的流逝,也许您只是以不同的方式命名它,但是在检查命令时,我注意到您的源文件似乎是,而本教程使用 .libgtk-4-devldconfig -p | grep libgtk-4main.chello-world-gtk.c
0赞 weuoimi 11/13/2023
我将文件命名为main.c并在命令中使用了这个名称,所以这不是导致问题的原因。是的,当我运行您建议的命令时,它会列出。

答: 暂无答案