"Erreur fatale: gtk / gtk.h: aucun fichier ou répertoire de ce type" en utilisant make

18

J'essaie d'utiliser la commande make pour construire. Je suis ceci . Je compile un code en utilisant le langage 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);
}
osama
la source
avez-vous même vérifié si le fichier est là comme il est indiqué? /gtk/gtk.h
Xylo
@Xylo ne sait pas comment vérifier. dites-moi comment je peux vérifier
osama
vérifier si le répertoire /usr/include/gtk-2.0existe
Xylo
1
@Baraiam j'ai ajouté le contenu de main.c
osama

Réponses:

23

Cela signifie que vous n'avez pas les en-têtes gtk pour construire des trucs en utilisant GTK +. C'est vraiment bizarre que l'erreur ne soit pas apparue à l'étape ./configure. Pour résoudre cela, faites simplement:

sudo apt-get install libgtk2.0-dev

ou libgtk-3-dev.

Ça devrait le faire.

Braiam
la source
j'ai compilé plusieurs codes en utilisant la bibliothèque #include <gtk / gtk.h>
osama
le problème est quand j'essaye d'utiliser la commande make
osama
pouvez-vous ajouter le code correspondant pour voir s'il est possible de reproduire?
Braiam
mes compilations parfaitement quand je le compile en utilisant cette commande gcc main.c -o bonjourgtk-config --cflags --libs gtk+-2.0
osama
allez à ce lien et vous comprendrez ce que je suis en train de faire askubuntu.com/questions/397246/...
oussama
9
sudo apt-get install build-essential gnome-devel

Cela est également nécessaire pour que vous puissiez faire des choses intéressantes comme:

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

Il vous permet d'utiliser pkg-configpour gagner beaucoup de temps

Alrick
la source
Au moins dans mon cas, je n'ai pas eu à exécuter sudo apt-get install build-essential gnome-devel, et la deuxième commande a semblé fonctionner au début, mais a également conduit à des problèmes "Aucun fichier ou répertoire". La solution était plus comme:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel
3

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

ThorSummoner
la source
Fonctionne exactement sur debian buster. Après avoir installé cette bibliothèque, la commande ci-dessous peut compiler du code source simple en exécutable ./helloworld. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE
2

Puisque vous utilisez des outils automatiques pour générer vos Makefiles, vous devez dire à automake comment trouver les dépendances d'en-tête et de 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 orienter dans la bonne direction. La plupart des éléments suivants sont basés sur le didacticiel trouvé dans Utilisation des 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 PKG_CHECK_MODULESmacro pour exécuter pkg-configpour trouver les directives d'inclusion et de bibliothèque correspondantes - il est recommandé de vérifier qu'elles pkg-configexistent d'abord, nous devons donc également ajouter un PKG_PROG_PKG_CONFIGtest. Les parties en gras indiquent ce qui a été ajouté, par rapport aux fichiers du didacticiel amhello d'origine à 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.amvous pouvez récupérer les CFLAGS et LIBS en utilisant l' GTKidentifiant que vous avez utilisé dans la PKG_CHECK_MODULESmacro ci-dessus

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

Lorsque vous réexécutez make, il doit régénérer votre src / Makefile avec les -Ichemins d'inclusion, -Lles chemins de bibliothèque et les bibliothèques appropriés .

tournevis
la source
tu es un génie. J'attendais juste votre réponse parce que je savais que vous pouviez donner la réponse appropriée. merci :)
osama