“Ölümcül hata: gtk / gtk.h: böyle bir dosya veya dizin yok”


18

Oluşturmak için make komutunu kullanmaya çalışıyorum. Ben takip ediyorum bu . GTK + 2 ve C dilini kullanarak bir kod derliyorum

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

bu main.c kodu

#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);
}

dosyanın var olduğu gibi olup olmadığını kontrol ettiniz mi? /gtk/gtk.h
Xylo

@ Xylo nasıl kontrol edeceğini bilmiyor. lütfen bana nasıl kontrol edebileceğimi söyle
osama

dizinin /usr/include/gtk-2.0mevcut olup olmadığını kontrol edin
Xylo

1
@Baraiam main.c içeriğini ekledim
osama

Yanıtlar:


23

Bu, GTK + kullanarak malzeme oluşturmak için gtk başlıklarına sahip olmadığınız anlamına gelir. Hatanın ./configure adımında görünmemesi gerçekten garip. Bunu çözmek için şunları yapın:

sudo apt-get install libgtk2.0-dev

veya libgtk-3-dev.

Bunu yapmalı.


#include <gtk / gtk.h> kitaplığını kullanarak birkaç kod derledim
osama

sorun komut komutunu kullanmaya çalıştığımda
osama

sonra yeniden üretmek mümkün olup olmadığını görmek için ilgili kodu ekleyebilir misiniz?
Aralık'ta Braiam

Benim compilies i gcc main.c -o merhaba bu komutu kullanarak derlemek mükemmel zamangtk-config --cflags --libs gtk+-2.0
Osama

Bu bağlantıya gidin ve ne yapmaya çalıştığımı anlayacaksınız askubuntu.com/questions/397246/…
osama

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

Bunun gibi serin şeyler yapabilmeniz için de gereklidir:

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

Çok pkg-configzaman kazanmak için kullanmanıza izin verir


En azından benim durumumda, yürütmek zorunda değildim sudo apt-get install build-essential gnome-develve ikinci komut ilk başta çalışıyor gibiydi, ama glib "Böyle bir dosya veya dizin yok" sorunlarına da yol açtı. Çözüm daha çok şöyleydi:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel

3

Gtk3 eşdeğer debian / ubuntu paketi libgtk-3-dev


Tam debian buster üzerinde çalışır. Bu kütüphaneyi kurduktan sonra feryat komutu basit kaynak kodunu ./helloworld yürütülebilir dosyasına derleyebilir. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE

2

Makefiles'lerinizi oluşturmak için autotools kullandığınızdan, automake'ye projenizin başlık ve kütüphane bağımlılıklarını nasıl bulacağınızı ve bunları nihai Makefiles'e nasıl dahil edeceğinizi söylemeniz gerekir. Bu benim uzmanlık alanım değil ama sizi doğru yöne yönlendirmeye çalışacağım. Aşağıdakilerin çoğu, Automake ve Autoconf ile C / C ++ kütüphanelerini kullanma bölümünde bulunan eğiticiyi temel alır

İlk olarak, Gtk-2.0 bağımlılığını eklemek için üst düzey configure.ac dosyasını değiştirmeniz gerekir. İlgili dahil etme ve kitaplık yönergelerini bulmak için PKG_CHECK_MODULESmakroyu kullanabilirsiniz pkg-config- önce var olup olmadığını kontrol etmek iyi bir uygulamadır pkg-config, bu yüzden bir PKG_PROG_PKG_CONFIGtest de eklemeliyiz . Kalın bölümler, başladığınız orijinal amhello eğiticisindeki dosyalara göre eklenenleri gösterir.

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

Ardından, yukarıdaki makroda kullandığınız tanımlayıcıyı src/Makefile.amkullanarak CFLAGS ve LIBS'leri alabilirsinizGTKPKG_CHECK_MODULES

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

Yeniden çalıştırdığınızda make, src / Makefile dosyanızı uygun -Iiçerme yolları, -Lkitaplık yolları ve kitaplıklar ile yeniden oluşturmalıdır .


sen bir dahisin. Sadece cevabınızı bekliyordum çünkü uygun cevabı verebileceğinizi biliyordum. teşekkürler :)
osama
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.