“Errore fatale: gtk / gtk.h: nessun file o directory simile” usando make


18

Sto cercando di usare il comando make per costruire. Sto seguendo questo . Sto compilando un codice usando GTK + 2 e il linguaggio 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

questo è il codice 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);
}

hai anche controllato se il file è lì come afferma? /gtk/gtk.h
Xylo

@Xylo non so come controllare. per favore dimmi come posso controllare
osama

controlla se la directory /usr/include/gtk-2.0esiste
Xylo

1
@Baraiam ho aggiunto il contenuto di main.c
osama

Risposte:


23

Questo significa che non hai le intestazioni gtk per creare cose usando GTK +. È davvero strano che l'errore non sia apparso al passaggio ./configure. Per risolvere questo basta fare:

sudo apt-get install libgtk2.0-dev

oppure libgtk-3-dev.

Questo dovrebbe farlo.


ho compilato diversi codici usando la libreria #include <gtk / gtk.h>
osama

il problema è quando sto cercando di usare il comando make
osama

puoi aggiungere il codice pertinente per vedere se è possibile riprodurre?
Braiam,

le mie compilation perfettamente quando la compilo usando questo comando gcc main.c -o ciaogtk-config --cflags --libs gtk+-2.0
osama

vai a questo link e capirai cosa sto cercando di fare askubuntu.com/questions/397246/…
osama,

9
sudo apt-get install build-essential gnome-devel

Ciò è necessario anche per poter fare cose interessanti come:

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

Ti consente di utilizzare pkg-configper risparmiare un sacco di tempo


Almeno nel mio caso, non ho dovuto eseguire sudo apt-get install build-essential gnome-devel, e il secondo comando sembrava funzionare inizialmente, ma ha portato anche a problemi glib "Nessun file o directory". La soluzione era più simile:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel,

3

Il pacchetto debian / ubuntu equivalente GTK3 è libgtk-3-dev


Funziona esattamente su debian buster. Dopo aver installato questa libreria, il comando muggito può compilare un semplice codice sorgente nell'eseguibile ./helloworld. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE

2

Dato che stai usando gli autotools per generare i tuoi Makefile, devi dire ad automake come trovare le dipendenze di header e librerie del tuo progetto e incorporarli nei Makefile finali. Questa non è la mia area di competenza ma cercherò di indicarti la giusta direzione. La maggior parte di quanto segue si basa sull'esercitazione disponibile in Utilizzo delle librerie C / C ++ con Automake e Autoconf

Innanzitutto, è necessario modificare il file configure.ac di livello superiore per aggiungere la dipendenza Gtk-2.0. Puoi utilizzare la PKG_CHECK_MODULESmacro per eseguire pkg-configper trovare le direttive di inclusione e libreria corrispondenti: è buona norma verificare che pkg-configesista prima, quindi dovremmo aggiungere anche un PKG_PROG_PKG_CONFIGtest. Le parti in grassetto indicano ciò che è stato aggiunto, rispetto ai file nel tutorial amhello originale da cui sei partito.

AC_INIT([amhello], [1.0], [bug-automake@gnu.org])
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

Quindi nel tuo src/Makefile.ampuoi recuperare CFLAGS e LIBS usando l' GTKidentificatore che hai usato nella PKG_CHECK_MODULESmacro sopra

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

Quando riesegui make, dovrebbe rigenerare src / Makefile con i -Ipercorsi di inclusione appropriati , i -Lpercorsi di libreria e le librerie.


sei un genio. stavo solo aspettando la tua risposta perché sapevo che puoi dare la risposta appropriata. grazie :)
osama,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.