it-swarm.com.de

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

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

[email protected]:~/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);
}
17
osama

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.

22
Braiam
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 pkg-config verwenden, um viel Zeit zu sparen

9
Alrick

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

2
ThorSummoner

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 Punkte basieren auf dem Tutorial 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. Mit dem Makro PKG_CHECK_MODULES können Sie pkg-config ausführen, um die entsprechenden Include- und Library-Anweisungen zu finden. Es empfiehlt sich, zunächst zu überprüfen, ob pkg-config vorhanden ist. Daher sollten wir einen PKG_PROG_PKG_CONFIG hinzufügen. Test auch. 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

Anschließend können Sie in Ihrem src/Makefile.am die CFLAGS und LIBS mit dem GTK -Identifikator abrufen, den Sie im obigen Makro PKG_CHECK_MODULES verwendet haben

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

Wenn Sie make erneut ausführen, sollte Ihr src/Makefile mit den entsprechenden -I Include-Pfaden, -L Bibliothekspfaden und Bibliotheken erneut generiert werden.

2
steeldriver