Próbuję użyć komendy make do zbudowania. Śledzę to . Kompiluję kod w języku GTK + 2 i 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
to jest kod 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
istniejeOdpowiedzi:
Oznacza to, że nie masz nagłówków gtk do tworzenia rzeczy za pomocą GTK +. To naprawdę dziwne, że błąd nie pojawił się w kroku ./configure. Aby rozwiązać ten problem, po prostu wykonaj:
lub
libgtk-3-dev
.Że należy to zrobić.
źródło
gtk-config --cflags --libs gtk+-2.0
Jest to również potrzebne, abyś mógł robić fajne rzeczy, takie jak:
Pozwala
pkg-config
zaoszczędzić dużo czasuźródło
sudo apt-get install build-essential gnome-devel
, a drugie polecenie wydawało się początkowo działać, ale doprowadziło również do problemów glib „Brak takich plików lub katalogów”. Rozwiązanie było bardziej jak:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Odpowiednikiem pakietu debian / ubuntu dla Gtk3 jest
libgtk-3-dev
źródło
gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
Ponieważ używasz autotools do generowania plików Makefiles, musisz powiedzieć automake, jak znaleźć zależności między nagłówkiem i biblioteką twojego projektu i włączyć je do końcowych plików Makefiles. To nie jest moja specjalizacja, ale postaram się skierować cię w dobrym kierunku. Większość poniższych instrukcji oparta jest na samouczku opisanym w temacie Korzystanie z bibliotek C / C ++ w programach Automake i Autoconf
Najpierw musisz zmodyfikować plik config.ac najwyższego poziomu, aby dodać zależność Gtk-2.0. Możesz użyć
PKG_CHECK_MODULES
makra do uruchomienia,pkg-config
aby znaleźć odpowiednie dyrektywy włączające i dyrektywy biblioteczne - dobrą praktyką jest sprawdzenie, czypkg-config
istnieje ona pierwsza, dlatego też powinniśmy dodaćPKG_PROG_PKG_CONFIG
test. Pogrubione fragmenty wskazują, co zostało dodane, w stosunku do plików w oryginalnym tutorialu amhello, od którego zacząłeś.Następnie
src/Makefile.am
możesz pobrać CFLAGS i LIBS, korzystając zGTK
identyfikatora użytego wPKG_CHECK_MODULES
powyższym makrzePo ponownym uruchomieniu
make
powinien ponownie wygenerować plik src / Makefile z odpowiednimi-I
ścieżkami dołączania, ścieżkami-L
bibliotek i bibliotek.źródło