Я пытаюсь использовать команду make для сборки. Я следую за этим . Я компилирую код, используя GTK + 2 и язык 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
это код 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
существует ли каталогОтветы:
Это означает, что у вас нет заголовков gtk для сборки вещей с использованием GTK +. Действительно странно, что ошибка не появилась на шаге ./configure. Чтобы решить эту проблему, просто сделайте:
или
libgtk-3-dev
.Это должно сделать это.
источник
gtk-config --cflags --libs gtk+-2.0
Это также необходимо, чтобы вы могли делать классные вещи, такие как:
Это позволяет использовать,
pkg-config
чтобы сэкономить много времениисточник
sudo apt-get install build-essential gnome-devel
, и вторая команда, казалось, сначала сработала, но также привела к появлению проблем с «Нет такого файла или каталога». Решение было больше похоже на:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Gtk3 эквивалентный пакет Debian / Ubuntu
libgtk-3-dev
источник
gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
Поскольку вы используете autotools для генерации ваших Makefile-ов, вам нужно указать automake, как найти заголовки и библиотечные зависимости вашего проекта и включить их в окончательные Make-файлы. Это не моя область знаний, но я постараюсь указать вам правильное направление. Большая часть следующего основана на учебном пособии Использование библиотек C / C ++ с Automake и Autoconf.
Сначала необходимо изменить файл configure.ac верхнего уровня, чтобы добавить зависимость Gtk-2.0. Вы можете использовать
PKG_CHECK_MODULES
макрос для запуска,pkg-config
чтобы найти соответствующие директивы include и library - это хорошая практика, чтобыpkg-config
сначала проверить, что существует, поэтому мы также должны добавитьPKG_PROG_PKG_CONFIG
тест. Части, выделенные полужирным шрифтом, указывают на то, что было добавлено относительно файлов в исходном учебнике amhello, с которого вы начали.Затем
src/Makefile.am
вы можете получить CFLAGS и LIBS, используяGTK
идентификатор, который вы использовали вPKG_CHECK_MODULES
макросе вышеПри повторном запуске
make
он должен сгенерировать ваш файл src / Makefile с соответствующими-I
путями включения, путями-L
библиотек и библиотеками.источник