在Ubuntu c ++上找不到gtk/gtk.h

Xwe*_*que 7 c c++ linux ubuntu g++

我对编程很陌生,特别是涉及如何包含库和类似的活动.我过去一直使用Python进行编程,并且我一直在使用GTK来创建窗口,这也是我在用c ++编程时打算做的事情.为了开始,这是我的代码:

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

static void helloWorld (GtkWidget *wid, GtkWidget *win)
{
  GtkWidget *dialog = NULL;

  dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World!");
  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
  gtk_dialog_run (GTK_DIALOG (dialog));
  gtk_widget_destroy (dialog);
}

int main (int argc, char *argv[])
{
  GtkWidget *button = NULL;
  GtkWidget *win = NULL;
  GtkWidget *vbox = NULL;

  /* Initialize GTK+ */
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
  gtk_init (&argc, &argv);
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);

  /* Create the main window */
  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_default_size(GTK_WINDOW (win), 400, 300);
  gtk_container_set_border_width (GTK_CONTAINER (win), 8);
  gtk_window_set_title (GTK_WINDOW (win), "test");
  gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
  gtk_widget_realize (win);
  g_signal_connect (win, "destroy", gtk_main_quit, NULL);

  /* Create a vertical box with buttons */
  vbox = gtk_vbox_new (TRUE, 6);
  gtk_container_add (GTK_CONTAINER (win), vbox);

  button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
  g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

  button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
  g_signal_connect (button, "clicked", gtk_main_quit, NULL);
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

  /* Enter the main loop */
  gtk_widget_show_all (win);
  gtk_main ();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码取自我在互联网上发现的"Hello world"示例.

我知道这个问题已经得到了答案,但我的情况要复杂得多(至少从我的角度来看).首先,我已经安装了所有必需的包.顺便说一句,我运行Ubuntu 14.04.

当我使用我编译代码时,g++ main.cpp我得到以下错误:

main.cpp:2:21: fatal error: gtk/gtk.h: No such file or directory
 #include <gtk/gtk.h>
                     ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

这个特殊错误有一个修复,就是像这样扩展编译命令:g++ main.cpp -I/usr/include/gtk-2.0.然而,这将提供另一个类似的错误:

In file included from /usr/include/gtk-2.0/gdk/gdk.h:32:0,
                 from /usr/include/gtk-2.0/gtk/gtk.h:32,
                 from main.cpp:2:
/usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30:21: fatal error: gio/gio.h: No such file or directory
 #include <gio/gio.h>
                     ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

你可以通过这样的扩展命令(所有命令都在互联网上的基金,我不太了解这一切)解决这一问题,以及:g++ -g -Wall -c -o program.o main.cpp -I/usr/include/gtk-2.0 $(pkg-config --libs --cflags glib-2.0).现在会出现错误cairo.h.

如您所见,存在类似的错误.我不知道有什么不对,但我必须相信有一个相对容易的解决方案.

此外,我尝试了全新安装的Ubuntu(只需要安装的软件包),并发生相同的错误.

dou*_*eud 12

当包含某个包时,该pkgconfig命令为编译器提供了所有必需-I(包含)和-l(链接器)语句.

看看运行给出的内容:

pkgconfig --cflags --libs gtk+-2.0
Run Code Online (Sandbox Code Playgroud)

我已经尝试在我的Ubuntu 14.04.1上编译你的代码了,当我使用时,它很顺利:

g++ main.cpp `pkg-config --cflags --libs gtk+-2.0`
Run Code Online (Sandbox Code Playgroud)

可能pkg-config --libs --cflags glib-2.0还不足以提供所有必需的包含路径和共享库.