"Error grave: gtk / gtk.h: No existe tal archivo o directorio" usando make

18

Estoy tratando de usar el comando make para construir. Estoy siguiendo este . Estoy compilando un código usando GTK + 2 y lenguaje 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

este es el código 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
fuente
¿incluso comprobaste si el archivo está allí como dice? /gtk/gtk.h
Xylo
@Xylo no sabe cómo verificar. por favor dime cómo puedo comprobarlo
osama
verificar si /usr/include/gtk-2.0existe el directorio
Xylo
1
@Baraiam he agregado el contenido de main.c
osama

Respuestas:

23

Esto significa que no tienes los encabezados gtk para construir cosas usando GTK +. Es realmente extraño que el error no aparezca en el paso ./configure. Para resolver esto solo haz:

sudo apt-get install libgtk2.0-dev

o libgtk-3-dev.

Deberias hacer eso.

Braiam
fuente
He compilado varios códigos usando la biblioteca #include <gtk / gtk.h>
osama
el problema es cuando intento usar el comando make
osama
¿puedes agregar el código relevante para ver si es posible reproducirlo?
Braiam
mis compilaciones perfectamente cuando lo compilo usando este comando gcc main.c -o hellogtk-config --cflags --libs gtk+-2.0
osama
vaya a este enlace y comprenderá lo que estoy tratando de hacer askubuntu.com/questions/397246/…
osama
9
sudo apt-get install build-essential gnome-devel

Eso también es necesario para que puedas hacer cosas geniales como:

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

Te permite usar pkg-configpara ahorrar mucho tiempo

Alrick
fuente
Al menos en mi caso, no tuve que ejecutar sudo apt-get install build-essential gnome-devel, y el segundo comando pareció funcionar al principio, pero también provocó problemas glib "No existe tal archivo o directorio". La solución fue más como:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel
3

El paquete debian / ubuntu equivalente a GTK3 es libgtk-3-dev

ThorSummoner
fuente
Funciona exactamente en Debian Buster. Después de instalar esta biblioteca, el siguiente comando puede compilar código fuente simple para el ejecutable ./helloworld. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE
2

Como está utilizando las herramientas automáticas para generar sus Makefiles, debe decirle a automake cómo encontrar las dependencias de encabezado y biblioteca de su proyecto e incorporarlas en los Makefiles finales. Esta no es mi área de especialización, pero trataré de orientarte en la dirección correcta. La mayor parte de lo siguiente se basa en el tutorial que se encuentra en Uso de bibliotecas C / C ++ con Automake y Autoconf

Primero, debe modificar el archivo configure.ac de nivel superior para agregar la dependencia Gtk-2.0. Puede usar la PKG_CHECK_MODULESmacro para ejecutarla pkg-configpara encontrar las directivas de inclusión y biblioteca correspondientes; es una buena práctica verificar que pkg-configexista primero, por lo que también debemos agregar una PKG_PROG_PKG_CONFIGprueba. Las partes en negrita indican lo que se agregó, en relación con los archivos en el tutorial original de amhello desde el que comenzó.

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

Luego, en su src/Makefile.ampuede recuperar los CFLAGS y LIBS utilizando el GTKidentificador que utilizó en la PKG_CHECK_MODULESmacro anterior

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

Cuando vuelva a ejecutar make, debería volver a generar su src / Makefile con las -Irutas de acceso apropiadas , -Lrutas de biblioteca y bibliotecas.

conductor de acero
fuente
eres un genio. Estaba esperando tu respuesta porque sabía que puedes dar la respuesta adecuada. gracias :)
osama