“Kesalahan fatal: gtk / gtk.h: Tidak ada file atau direktori” menggunakan make

18

Saya mencoba menggunakan perintah make untuk membangun. Saya mengikuti ini . Saya mengkompilasi kode menggunakan bahasa GTK + 2 dan 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

ini adalah kode 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
sumber
apakah Anda bahkan memeriksa apakah file tersebut ada di sana seperti yang dinyatakannya? /gtk/gtk.h
Xylo
@Xylo tidak tahu cara memeriksa. tolong beri tahu saya bagaimana saya dapat memeriksa
osama
periksa apakah direktori /usr/include/gtk-2.0ada
Xylo
1
@Baraiam saya telah menambahkan konten main.c
osama

Jawaban:

23

Ini artinya Anda tidak memiliki header gtk untuk membuat barang menggunakan GTK +. Sangat aneh bahwa kesalahan tidak muncul pada langkah ./configure. Untuk mengatasi ini lakukan saja:

sudo apt-get install libgtk2.0-dev

atau libgtk-3-dev.

Itu harus dilakukan.

Braiam
sumber
saya telah mengkompilasi beberapa kode menggunakan perpustakaan #include <gtk / gtk.h>
osama
masalahnya adalah ketika saya mencoba menggunakan perintah make
osama
dapatkah Anda menambahkan kode yang relevan kemudian untuk melihat apakah mungkin untuk mereproduksi?
Braiam
compilies saya dengan sempurna ketika saya mengkompilasinya dengan menggunakan perintah ini gcc main.c -o halogtk-config --cflags --libs gtk+-2.0
osama
buka tautan ini dan Anda akan mengerti apa yang saya coba lakukan askubuntu.com/questions/397246/…
osama
9
sudo apt-get install build-essential gnome-devel

Itu juga diperlukan agar Anda dapat melakukan hal-hal keren seperti:

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

Ini memungkinkan Anda menggunakan pkg-configuntuk menghemat banyak waktu

Alrick
sumber
Setidaknya dalam kasus saya, saya tidak perlu mengeksekusi sudo apt-get install build-essential gnome-devel, dan perintah kedua tampaknya bekerja pada awalnya, tetapi menyebabkan masalah "Tidak ada file atau direktori" seperti itu. Solusi lebih seperti:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel
3

Paket setara debt / ubuntu Gtk3 adalah libgtk-3-dev

ThorSummoner
sumber
Tepatnya bekerja pada debian buster. Setelah menginstal pustaka ini di bawah perintah dapat mengkompilasi kode sumber sederhana untuk ./helloworld dieksekusi. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE
2

Karena Anda menggunakan autotool untuk menghasilkan Makefiles Anda, Anda perlu memberi tahu automake cara menemukan dependensi header dan pustaka dari proyek Anda dan memasukkannya ke dalam Makefiles akhir. Ini bukan bidang keahlian saya, tetapi saya akan mencoba mengarahkan Anda ke arah yang benar. Sebagian besar dari berikut ini didasarkan pada tutorial yang ditemukan di Menggunakan perpustakaan C / C ++ dengan Automake dan Autoconf

Pertama, Anda harus memodifikasi file configure.ac tingkat atas untuk menambahkan ketergantungan Gtk-2.0. Anda dapat menggunakan PKG_CHECK_MODULESmakro untuk menjalankan pkg-configuntuk menemukan arahan yang menyertakan dan pustaka yang sesuai - praktik yang baik untuk memeriksa yang pkg-configada terlebih dahulu, jadi kita harus menambahkan PKG_PROG_PKG_CONFIGtes juga. Bagian tebal menunjukkan apa yang ditambahkan, relatif terhadap file dalam tutorial asli yang Anda mulai.

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

Kemudian di Anda, src/Makefile.amAnda dapat mengambil CFLAGS dan LIBS menggunakan GTKpengidentifikasi yang Anda gunakan di PKG_CHECK_MODULESmakro di atas

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

Ketika Anda menjalankan kembali make, itu harus menghasilkan kembali src / Makefile Anda dengan -Ijalur sertakan yang sesuai , -Ljalur perpustakaan dan perpustakaan.

Steeldriver
sumber
kamu jenius. saya hanya menunggu jawaban Anda karena saya tahu Anda bisa memberikan jawaban yang sesuai. terima kasih :)
osama