"घातक त्रुटि: gtk / gtk.h: ऐसी कोई फ़ाइल या निर्देशिका नहीं" बनाने का उपयोग करते हुए


18

मैं बनाने के लिए कमांड बनाने का उपयोग करने की कोशिश कर रहा हूं। मैं अनुसरण कर रहा हूं इस । मैं GTK + 2 और 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

यह 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);
}

क्या आपने यह भी जांचा था कि क्या फ़ाइल में यह लिखा है? /gtk/gtk.h
Xylo

@Xylo न जाने कैसे जाँच करता है। कृपया मुझे बताएं कि मैं कैसे जांच कर सकता हूं
ओसामा

जाँच करें कि क्या निर्देशिका /usr/include/gtk-2.0मौजूद है
Xylo

1
@Baraiam i ने
osama

जवाबों:


23

इसका मतलब है कि आपके पास GTK + का उपयोग करके सामान बनाने के लिए gtk हेडर नहीं है। वास्तव में अजीब है कि त्रुटि ./configure कदम पर दिखाई नहीं दी। इसे हल करने के लिए बस करें:

sudo apt-get install libgtk2.0-dev

या libgtk-3-dev

इससे हो जाना चाहिए।


मैंने कई कोड संकलित किए हैं #include <gtk / gtk.h> लाइब्रेरी का उपयोग करके
osama

समस्या यह है कि जब मैं कमांड बनाने का उपयोग करने की कोशिश कर रहा हूं
ओसामा

क्या आप संबंधित कोड जोड़ सकते हैं, यह देखने के लिए कि क्या पुन: पेश करना संभव है?
ब्रिअम

जब मैं इस कमांड gcc main.c -o हैलो का उपयोग करके इसे संकलित करता हूं तो पूरी तरह से कंपाइल करता हैgtk-config --cflags --libs gtk+-2.0
osama

इस लिंक पर जाएँ और आप समझेंगे कि मैं क्या करने की कोशिश कर रहा हूँ askubuntu.com/questions/397246/…
ओसामा

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

यह भी आवश्यक है ताकि आप शांत चीजें कर सकें जैसे:

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

यह आपको pkg-configबहुत सारा समय बचाने के लिए उपयोग करने की अनुमति देता है


कम से कम मेरे मामले में, मुझे निष्पादित करने की आवश्यकता नहीं थी sudo apt-get install build-essential gnome-devel, और दूसरी कमान पहली बार में काम करने लगती थी, लेकिन साथ ही साथ "कोई ऐसी फ़ाइल या निर्देशिका नहीं" समस्याओं के लिए नेतृत्व किया। समाधान अधिक पसंद किया गया था:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
रुई पिमेंटेल

3

Gtk3 समकक्ष डेबियन / ubuntu पैकेज है libgtk-3-dev


वास्तव में डेबियन बस्टर पर काम करता है। इस लाइब्रेरी को स्थापित करने के बाद bellow कमांड साधारण स्रोत कोड को ./helloworld निष्पादन योग्य में संकलित कर सकता है। gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
एस्माईल

2

चूंकि आप अपने मेकफाइल्स को उत्पन्न करने के लिए ऑटोटूलस का उपयोग कर रहे हैं, इसलिए आपको अपने प्रोजेक्ट के हेडर और लाइब्रेरी निर्भरता को खोजने और उन्हें अंतिम मेकफाइल्स में शामिल करने के तरीके को स्वचालित करने की आवश्यकता है। यह मेरी विशेषज्ञता का क्षेत्र नहीं है, लेकिन मैं आपको सही दिशा में इंगित करने का प्रयास करूंगा। निम्नलिखित में से अधिकांश C / C ++ लाइब्रेरीज़ को ऑटोमैके और ऑटोकॉन्फ़ के साथ उपयोग किए जाने वाले ट्यूटोरियल पर आधारित है

सबसे पहले, आपको Gtk-2.0 निर्भरता को जोड़ने के लिए शीर्ष स्तर config.ac फ़ाइल को संशोधित करना होगा। आप संबंधित शामिल और लाइब्रेरी निर्देशों को खोजने के PKG_CHECK_MODULESलिए चलाने के pkg-configलिए मैक्रो का उपयोग कर सकते हैं - यह जांचने के लिए अच्छा अभ्यास है कि pkg-configपहले मौजूद है, इसलिए हमें एक PKG_PROG_PKG_CONFIGपरीक्षण भी जोड़ना चाहिए । बोल्ड किए गए भाग इंगित करते हैं कि क्या जोड़ा गया है, मूल एमहेलो ट्यूटोरियल की फाइलों के सापेक्ष जो आपने शुरू किया था।

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

फिर आपके द्वारा src/Makefile.amआप ऊपर GTKके PKG_CHECK_MODULESमैक्रो में उपयोग किए गए पहचानकर्ता का उपयोग करके सीएफएलएजीएस और एलआईबीएस प्राप्त कर सकते हैं

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

जब आप फिर से दौड़ते हैं make, तो उसे अपने src / Makefile को फिर से तैयार करना चाहिए जिसमें उचित -Iपथ, -Lलाइब्रेरी पथ और लाइब्रेरी शामिल हों।


आप एक प्रतिभाशाली हैं। मुझे आपके उत्तर की प्रतीक्षा थी क्योंकि मुझे पता था कि आप उचित उत्तर दे सकते हैं। धन्यवाद :)
ओसामा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.