"фатальная ошибка: gtk / gtk.h: нет такого файла или каталога", используя make

10

Я пытаюсь использовать команду make для сборки. Я следую за этим . Я компилирую код с использованием GTK + 2 и языка C

[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

это код 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);
}
    
задан osama 29.12.2013 в 23:09
источник

4 ответа

15

Это означает, что у вас нет заголовков gtk для сборки файлов с помощью GTK +. Действительно странно, что ошибка не появилась на шаге ./configure. Чтобы решить эту проблему, выполните следующие действия:

sudo apt-get install libgtk2.0-dev

или libgtk-3-dev .

Это должно сделать это.

    
ответ дан Braiam 29.12.2013 в 23:17
источник
5
sudo apt-get install build-essential gnome-devel

Это также необходимо, чтобы вы могли делать такие классные вещи, как:

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

Это позволяет вам использовать pkg-config , чтобы сэкономить много времени

    
ответ дан Alrick 10.01.2016 в 20:16
2

Поскольку вы используете autotools для создания своих Make-файлов, вам нужно сказать 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, из которого вы начали.

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

Затем в вашем src/Makefile.am вы можете получить CFLAGS и LIBS, используя идентификатор GTK , который вы использовали в макросе PKG_CHECK_MODULES выше

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

При повторном запуске make он должен повторно сгенерировать ваш файл src / Makefile с помощью соответствующих путей -I include, путей и библиотек -L библиотек.

    
ответ дан steeldriver 30.12.2013 в 02:01
2

Gtk3 эквивалентный пакет debian / ubuntu - libgtk-3-dev

    
ответ дан ThorSummoner 27.12.2014 в 01:51