“Erro fatal: gtk / gtk.h: não existe esse arquivo ou diretório” usando make

18

Estou tentando usar o comando make para construir. Eu estou seguindo isso . Estou compilando um código usando a linguagem GTK + 2 e 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

este é o código 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
fonte
você checou se o arquivo está lá como está? /gtk/gtk.h
Xylo
@Xylo não sabe como verificar. por favor me diga como eu posso verificar
osama
verifique se o diretório /usr/include/gtk-2.0existe
Xylo
11
@Baraiam eu adicionei o conteúdo de main.c
osama

Respostas:

23

Isso significa que você não tem os cabeçalhos gtk para criar coisas usando o GTK +. É realmente estranho que o erro não tenha aparecido na etapa ./configure. Para resolver isso basta fazer:

sudo apt-get install libgtk2.0-dev

ou libgtk-3-dev.

Isso deve resolver.

Braiam
fonte
Eu compilei vários códigos usando a biblioteca #include <gtk / gtk.h> #
osama
o problema é quando eu estou tentando comando fazer uso
osama
você pode adicionar o código relevante para ver se é possível reproduzir?
Braiam
meus compilies perfeitamente quando eu compilá-lo usando este comando gcc main.c -o Olágtk-config --cflags --libs gtk+-2.0
osama
vá para este link e você entenderá o que estou tentando fazer askubuntu.com/questions/397246/…
osama
9
sudo apt-get install build-essential gnome-devel

Isso também é necessário para que você possa fazer coisas legais como:

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

Ele permite que você use pkg-configpara economizar muito tempo

Alrick
fonte
Pelo menos no meu caso, eu não precisei executar sudo apt-get install build-essential gnome-devel, e o segundo comando pareceu funcionar a princípio, mas também gerou alguns problemas "Não existe esse arquivo ou diretório". A solução foi mais como:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel
3

O pacote debian / ubuntu equivalente a Gtk3 é libgtk-3-dev

ThorSummoner
fonte
Funciona exatamente no debian buster. Após instalar esta biblioteca, o comando abaixo pode compilar um código-fonte simples para o executável ./helloworld. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE
2

Como você está usando ferramentas automáticas para gerar seus Makefiles, você precisa informar à automake como encontrar as dependências de cabeçalho e biblioteca do seu projeto e incorporá-las aos Makefiles finais. Esta não é minha área de especialização, mas tentarei apontá-lo na direção certa. A maioria dos itens a seguir é baseada no tutorial encontrado em Usando bibliotecas C / C ++ com Automake e Autoconf

Primeiro, você deve modificar o arquivo configure.ac de nível superior para adicionar a dependência do Gtk-2.0. Você pode usar a PKG_CHECK_MODULESmacro para executar pkg-configpara encontrar as diretivas de inclusão e biblioteca correspondentes - é uma boa prática verificar se pkg-configexiste primeiro, portanto, devemos adicionar um PKG_PROG_PKG_CONFIGteste também. As partes em negrito indicam o que foi adicionado, em relação aos arquivos no tutorial original do amhello de onde você começou.

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

Em seguida, no seu, src/Makefile.amvocê pode recuperar os CFLAGS e LIBS usando o GTKidentificador usado na PKG_CHECK_MODULESmacro acima

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

Quando você executar novamente make, ele deverá gerar novamente seu src / Makefile com os -Icaminhos de inclusão apropriados , -Lcaminhos de bibliotecas e bibliotecas.

chave de aço
fonte
você é um gênio. Eu estava apenas esperando sua resposta, porque sabia que você poderia dar a resposta apropriada. Obrigado :)
osama