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

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

hp@ubuntu:~/amhello$ makemake  all-recursivemake[1]: Entering directory `/home/hp/amhello'Making all in srcmake[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.cmain.c:3:20: fatal error: gtk/gtk.h: No such file or directorycompilation terminated.make[2]: *** [main.o] Error 1make[2]: Leaving directory `/home/hp/amhello/src'make[1]: *** [all-recursive] Error 1make[1]: Leaving directory `/home/hp/amhello'make: *** [all] Error 2

это основной код.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);}

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

sudo apt-get install libgtk2.0-dev

или libgtk-3-dev.

Этого должно хватить.

sudo apt-get install build-essential gnome-devel

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

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

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

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

Поскольку вы используете autotools для создания ваших файлов Makefile, вам нужно сообщить automake, как найти зависимости заголовка и библиотеки вашего проекта и включить их в конечные файлы Makefile. Это не моя область знаний, но я постараюсь направить вас в правильном направлении. Большая часть нижеследующего основана на руководстве, найденном по адресу Использование библиотек 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], [bug-automake@gnu.org])AM_INIT_AUTOMAKE([-Wall -Werror foreign])AC_PROG_CCAC_CONFIG_HEADERS([config.h])AC_CONFIG_FILES([ Makefile src/Makefile])dnl-тест для pkg-configPKG_PROG_PKG_CONFIG([0.22])>dnl-тест для gtk+PKG_CHECK_MODULES([GTK], [gtk+-2.0 = 2.24.10])AC_OUTPUT

Тогда в вашем src/Makefile.am вы можете получить CFLAGS и БИБЛИОТЕКИ, используя GTK идентификатор, который вы использовали в PKG_CHECK_MODULES макрос выше

bin_PROGRAMS = hellohello_SOURCES = main.cAM_CPPFLAGS = ${GTK_CFLAGS}hello_LDADD = ${GTK_LIBS}

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

В CentOS 7:а) пакеты:

pkg-config --list-all|grep gtk...gtk+-3.0                  GTK+ - GTK+ Graphical UI Library...gtk+-2.0                  GTK+ - GTK+ Graphical UI Library (x11 target)...

б) редактирование раздела заголовка вашего сниппета:

#include<config.h>#include<stdio.h>#include<gtk/gtk.h>

к

#include<stdlib.h>#include<stdio.h>#include<gtk/gtk.h>

c) компиляция с использованием:

gcc main.c -o main `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` 

или

gcc main.c -o main `pkg-config --cflags gtk+-3.0` `pkg-config --libs gtk+-3.0` 

и

d) выполнение с использованием:

GDK_SCALE=5 ./main

сработало на меня!

@Baraiam я добавил содержимое main.c

вы хотя бы проверили, существует ли файл, как в нем указано? /gtk/gtk.h

@Xylo не знаю, как проверить. пожалуйста, скажите мне, как я могу проверить

проверьте, существует ли каталог /usr/include/gtk-2.0