web-dev-qa-db-fra.com

"erreur fatale: gtk / gtk.h: Aucun fichier ou répertoire de ce type" à l'aide de make

J'essaie d'utiliser make command pour construire. Je suis this . Je compile un code en utilisant les langages GTK + 2 et C

hp@ubuntu:~/amhello$ make
make  all-recursive
make[1]: Entering directory `/home/hp/amhello'
Making all in src
make[2]: Entering directory `/home/hp/amhello/src'
gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o         main.o main.c
main.c:3:20: fatal error: gtk/gtk.h: No such file or directory
compilation terminated.
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/home/hp/amhello/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/hp/amhello'
make: *** [all] Error 2

c'est le code main.c

#include<config.h>
#include<stdio.h>
#include<gtk/gtk.h>
void static call(GtkWidget *widget,gpointer data) {
    g_print("%s \n",(gchar*) data);
}
int main(int agrc, char *agrv[]) {
    gtk_init(&agrc,&agrv);
    GtkWidget *window,*button;
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
    gtk_window_set_title(GTK_WINDOW(window),"one button");
    button=gtk_button_new_with_label("hello world");
    g_signal_connect(button,"clicked",G_CALLBACK(call),(gpointer) "hello world");
    gtk_container_set_border_width(GTK_CONTAINER(window),10);
    gtk_container_add(GTK_CONTAINER(window),button);
    gtk_widget_show_all(window);
    gtk_main();
    return (0);
}
16
osama

Cela signifie que vous n'avez pas les en-têtes gtk pour construire des choses en utilisant GTK +. Est-ce vraiment étrange que l'erreur ne soit pas apparue à l'étape ./configure. Pour résoudre ce problème, il suffit de:

Sudo apt-get install libgtk2.0-dev

ou libgtk-3-dev.

Ça devrait le faire.

22
Braiam
Sudo apt-get install build-essential gnome-devel

Cela est également nécessaire pour pouvoir faire des choses cool comme:

g++ main.cpp -o base `pkg-config --cflags --libs gtk+-3.0`

Il vous permet d’utiliser pkg-config pour gagner beaucoup de temps.

9
Alrick

Le paquet debian/ubuntu équivalent à Gtk3 est libgtk-3-dev

2
ThorSummoner

Puisque vous utilisez autotools pour générer vos Makefiles, vous devez indiquer à automake comment trouver les dépendances de l’en-tête et de la bibliothèque de votre projet et les incorporer dans les Makefiles finaux. Ce n'est pas mon domaine d'expertise, mais je vais essayer de vous indiquer la bonne direction. La plupart des éléments suivants sont basés sur le didacticiel présenté à l'adresse - tilisation de bibliothèques C/C++ avec Automake et Autoconf

Tout d'abord, vous devez modifier le fichier configure.ac de niveau supérieur pour ajouter la dépendance Gtk-2.0. Vous pouvez utiliser la macro PKG_CHECK_MODULES pour exécuter pkg-config afin de trouver les directives d'inclusion et de bibliothèque correspondantes. Il est recommandé de vérifier que pkg-config existe en premier. Nous devons donc également ajouter un test PKG_PROG_PKG_CONFIG. Les parties en gras indiquent ce qui a été ajouté, par rapport aux fichiers du didacticiel amhello original à partir duquel vous avez commencé.

AC_INIT([amhello], [1.0], [[email protected]])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
dnl Test for pkg-config
PKG_PROG_PKG_CONFIG([0.22])dnl Test for gtk+
PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10])
AC_OUTPUT

Ensuite, dans votre src/Makefile.am, vous pouvez récupérer CFLAGS et LIBS en utilisant l'identifiant GTKque vous avez utilisé dans la macro PKG_CHECK_MODULES ci-dessus.

bin_PROGRAMS = hello
hello_SOURCES = main.c
AM_CPPFLAGS = ${GTK_CFLAGS}
hello_LDADD = ${GTK_LIBS}

Lorsque vous relancez makename__, il doit générer de nouveau votre fichier src/Makefile avec les chemins d’inclusion -I, -L et les bibliothèques appropriés.

2
steeldriver