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);
}
/usr/include/gtk-2.0
existe el directorioRespuestas:
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:
o
libgtk-3-dev
.Deberias hacer eso.
fuente
gtk-config --cflags --libs gtk+-2.0
Eso también es necesario para que puedas hacer cosas geniales como:
Te permite usar
pkg-config
para ahorrar mucho tiempofuente
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`
El paquete debian / ubuntu equivalente a GTK3 es
libgtk-3-dev
fuente
gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
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_MODULES
macro para ejecutarlapkg-config
para encontrar las directivas de inclusión y biblioteca correspondientes; es una buena práctica verificar quepkg-config
exista primero, por lo que también debemos agregar unaPKG_PROG_PKG_CONFIG
prueba. 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ó.Luego, en su
src/Makefile.am
puede recuperar los CFLAGS y LIBS utilizando elGTK
identificador que utilizó en laPKG_CHECK_MODULES
macro anteriorCuando vuelva a ejecutar
make
, debería volver a generar su src / Makefile con las-I
rutas de acceso apropiadas ,-L
rutas de biblioteca y bibliotecas.fuente