"Schwerwiegender Fehler: gtk / gtk.h: Keine solche Datei oder Verzeichnis" mit make

18

Ich versuche, mit dem Befehl make zu bauen. Ich verfolge das . Ich kompiliere einen Code mit GTK + 2 und C-Sprache

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

Dies ist der main.c-Code

#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
quelle
Hast du überhaupt geprüft, ob die Datei dort ist, wie es heißt? /gtk/gtk.h
Xylo
@ Xylo weiß nicht, wie man es überprüft. Bitte sag mir, wie ich überprüfen kann
osama
Überprüfen Sie, ob das Verzeichnis /usr/include/gtk-2.0vorhanden ist
Xylo
1
@Baraiam Ich habe den Inhalt von main.c
osama 29.12.13

Antworten:

23

Dies bedeutet, dass Sie nicht über die gtk-Header verfügen, um mit GTK + Inhalte zu erstellen. Ist echt komisch, dass der Fehler bei ./configure step nicht aufgetaucht ist. Um dies zu lösen, mache einfach:

sudo apt-get install libgtk2.0-dev

oder libgtk-3-dev.

Das sollte es tun.

Braiam
quelle
ich habe mehrere codes mit der bibliothek #include <gtk / gtk.h>
osama 29.12.13
Das Problem ist, wenn ich versuche, den Befehl make
osama 29.12.13
Können Sie den entsprechenden Code dann hinzufügen, um zu sehen, ob eine Reproduktion möglich ist?
Braiam
meine compilies perfekt, wenn ich es mit diesem Befehl kompilieren gcc main.c -o hallogtk-config --cflags --libs gtk+-2.0
osama
Gehen Sie zu diesem Link und Sie werden verstehen, was ich versuche zu tun askubuntu.com/questions/397246/…
osama
9
sudo apt-get install build-essential gnome-devel

Das wird auch benötigt, damit du coole Sachen machen kannst wie:

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

Sie können damit pkg-configviel Zeit sparen

Alrick
quelle
Zumindest in meinem Fall musste ich nicht ausführen sudo apt-get install build-essential gnome-devel, und der zweite Befehl schien zunächst zu funktionieren, führte aber auch zu glib "No such file or directory" -Problemen. Lösung war eher wie:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel
2

Da Sie Autotools zum Generieren Ihrer Makefiles verwenden, müssen Sie automake mitteilen, wie die Header- und Bibliotheksabhängigkeiten Ihres Projekts ermittelt und in die endgültigen Makefiles integriert werden sollen. Dies ist nicht mein Fachgebiet, aber ich werde versuchen, Sie in die richtige Richtung zu weisen. Die meisten der folgenden Informationen basieren auf dem Lernprogramm unter Verwenden von C / C ++ - Bibliotheken mit Automake und Autoconf

Zunächst müssen Sie die Datei configure.ac auf oberster Ebene ändern, um die Gtk-2.0-Abhängigkeit hinzuzufügen. Sie können das PKG_CHECK_MODULESMakro zum Ausführen verwenden pkg-config, um die entsprechenden Include- und Library-Anweisungen zu finden. Es empfiehlt sich, pkg-configzunächst zu überprüfen, ob sie vorhanden sind. Daher sollten wir auch einen PKG_PROG_PKG_CONFIGTest hinzufügen . Die fett gedruckten Teile zeigen an, was hinzugefügt wurde, relativ zu den Dateien im ursprünglichen amhello-Tutorial, mit dem Sie begonnen haben.

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

Dann können src/Makefile.amSie in Ihrem die CFLAGS und LIBS mit dem GTKBezeichner abrufen, den Sie im PKG_CHECK_MODULESobigen Makro verwendet haben

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

Wenn Sie es erneut ausführen make, sollte es Ihr src / Makefile mit den entsprechenden -IInclude-Pfaden, -LBibliothekspfaden und Bibliotheken neu generieren .

Stahlfahrer
quelle
du bist ein Genie. Ich habe nur auf deine Antwort gewartet, weil ich wusste, dass du die passende Antwort geben kannst. danke :)
osama
2

Das Gtk3-äquivalente Debian / Ubuntu-Paket ist libgtk-3-dev

ThorSummoner
quelle