【问题标题】:How to include properly a gtk.h file for GTK linux development?如何正确包含用于 GTK linux 开发的 gtk.h 文件?
【发布时间】:2021-02-22 22:29:15
【问题描述】:

在 Linux Mint 20.1 上,我使用以下命令安装了软件包 libgtk-3.0-dev:

sudo apt install libgtk-3.0-dev

安装成功但是当我尝试编译一个简单的例子时:

 // Include gtk
#include <gtk/gtk.h>

static void on_activate (GtkApplication *app) {
  // Create a new window
  GtkWidget *window = gtk_application_window_new (app);
  // Create a new button
  GtkWidget *button = gtk_button_new_with_label ("Hello, World!");
  // When the button is clicked, close the window passed as an argument
  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window);
  gtk_window_set_child (GTK_WINDOW (window), button);
  gtk_window_present (GTK_WINDOW (window));
}

int main (int argc, char *argv[]) {
  // Create a new application
  GtkApplication *app = gtk_application_new("com.example.GtkApplication", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (on_activate), NULL);
  return g_application_run (G_APPLICATION (app), argc, argv);
}

但是编译器给我一个错误,它找不到头文件。我可能在这里遗漏了一些东西。有人,你能指导我如何解决这个问题吗?

我使用以下命令编译:

  gcc -I/usr/include/gtk-3.0 -I/usr/include/glib-2.0  gtk_app.c

我得到的错误是:

In file included from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from /usr/include/gtk-3.0/gdk/gdkconfig.h:13,
                 from /usr/include/gtk-3.0/gdk/gdk.h:30,
                 from /usr/include/gtk-3.0/gtk/gtk.h:30,
                 from gtk_app.c:2:
/usr/include/glib-2.0/glib/gtypes.h:32:10: fatal error: glibconfig.h: No such file or directory
   32 | #include <glibconfig.h>

【问题讨论】:

  • 如何编译?您必须向编译器提供包含文件夹
  • edit您的问题并复制并粘贴编译命令和错误消息。您使用make 或其他构建系统吗?也许您必须将/usr/include/gtk-3.0 添加为包含目录?
  • @Bodo 编辑说明

标签: c header gtk


【解决方案1】:

您必须向编译器提供头文件和库的路径信息。

对于编译,这可以通过选项来完成(包括反引号)

`pkg-config --cflags gtk+-3.0`

对于链接,您可以添加

`pkg-config --libs gtk+-3.0`

从您的错误消息看来,您的问题不是 GTK,而是 GLIB。 您也应该为包 glib-2.0 添加相同的命令。

【讨论】:

  • pkg-config --cflags gtk+-3.0 这个命令给了我很多(几十个)包含目录。对吗?
  • 是的,这是一个相当长的列表。
  • 这有点向前迈进了一步,但现在,我收到一个链接错误:undefined reference to gtk_window_set_child。我正在使用命令编译:gcc gtk_app.c pkg-config --cflags gtk+-3.0 pkg-config --libs gtk+-3.0 pkg-config --cflags glib-2.0 pkg-config --libs glib-2.0
  • 啊抱歉..我的错,我一直在使用 GTK 版本 4 的示例。使用版本 3 示例,一切正常。谢谢!
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多