2009-07-17 12 views
41

तो यहाँ दुनिया की सबसे सरल चिकना कार्यक्रम है:मैं ग्लिब के लिए "हैलो वर्ल्ड" क्यों नहीं बना सकता?

#include <glib.h> 

मैं gcc test.c के साथ संकलित करने के लिए कोशिश करते हैं और मुझे मिलता है:

# dpkg -l | grep libglib 
ii libglib-perl        1:1.183-1        Perl interface to the GLib and GObject libra 
ii libglib1.2-dev       1.2.10-19build1       The GLib library of C routines (development) 
ii libglib1.2ldbl       1.2.10-19build1       The GLib library of C routines 
ii libglib2.0-0        2.20.1-0ubuntu2       The GLib library of C routines 
ii libglib2.0-cil       2.12.1-1ubuntu2       CLI binding for the GLib utility library 2.1 
ii libglib2.0-data       2.18.2-0ubuntu2       Common files for GLib library 
ii libglib2.0-dev       2.20.1-0ubuntu2       Development files for the GLib library 
ii libglibmm-2.4-1c2a      2.18.1-1        C++ wrapper for the GLib toolkit (shared lib 
:

test.c:1:18: error: glib.h: No such file or directory 

तो मुझे यकीन है कि मैं सही संकुल है कि बनाने के

फिर मैं किसी भी "glib.h" को कहीं भी/usr/include के अंतर्गत खोजता हूं। मुझे दो, /usr/include/glib-1.2/glib.h और /usr/include/glib-2.0/glib.h मिलता है। तो मैं कोशिश:

$ gcc -I/usr/include/glib-2.0 -Wall test.c 
In file included from /usr/include/glib-2.0/glib/galloca.h:34, 
      from /usr/include/glib-2.0/glib.h:32, 
      from test.c:2: 
/usr/include/glib-2.0/glib/gtypes.h:34:24: error: glibconfig.h: No such file or directory 

(10.000 के बारे में अधिक कतरना त्रुटियों)

मैं एक glibconfig.h अपने कंप्यूटर पर कहीं भी है लगता नहीं है।

अब मैं क्या करूँ?

+1

हो सकता है कि मैं सिर्फ मूर्ख जा रहा हूँ, लेकिन तुम क्यों एक हैडर संकलित करने के लिए कोशिश कर रहे हैं? – GManNickG

+14

मैंने एक और जटिल कार्यक्रम के साथ शुरुआत की, लेकिन यदि "#शामिल करें" काम नहीं करेगा, कुछ भी नहीं होगा। – mike

+0

यदि आपके पास कोई मुख्य कार्य नहीं है, तो यह * काम नहीं करेगा। 'Stdio.h' के साथ अपना 'glib.h' को प्रतिस्थापित करना, या तो काम नहीं करता है। मान लें कि आपके पास एक मुख्य कार्य है, सही जवाब है कि दूसरे उत्तर में वर्णित 'pkg-config' का उपयोग करना है। –

उत्तर

49

फिसलनदार अपने आप को छुपा देता है ... आपका शामिल क्योंकि जीसीसी स्वचालित रूप से उपनिर्देशिका खोज नहीं करता बयान काम नहीं करता है, और इसलिए में glib.h नहीं देख सकते हैं चिकना-1.2 या चिकना-2.0।

जीआईएलबी मैनुअल में Compiling GLib Applications पृष्ठ पढ़ें ... आप जीसीसी के लिए सही झंडे प्राप्त करने के लिए pkg-config --cflags glib-2.0 जैसे कमांड का उपयोग करते हैं।

आप क्या प्रयास कर रहे हैं करने के लिए विहित रास्ता

% gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

नोट वापस टिक है, जो pkg-config कमांड "यथा-स्थान" चलाने के लिए खोल में बताते हैं।

+3

यह छुपा नहीं रहा है: glibconfig.h आर्क आश्रित डेटा की एक सूची है और इसलिए/usr/include से संबंधित नहीं है। यह आमतौर पर/usr/lib/glib2/... – ntd

+0

के तहत पाया जाता है [यह] (http://askubuntu.com/a/90342) मेरे लिए काम करता है। – gkiko

-2

apt-get build-dep अपने दोस्त है - कोई भी सभी संकुल आप कुछ का निर्माण करने की आवश्यकता है याद कर सकते हैं।

+2

फ़ाइल पर्याप्त रूप से वहां है, इसलिए एक डेबियन-विशिष्ट पैकेज प्रबंधन आदेश समस्या को हल करने वाला नहीं है। 'pkg-config' का उपयोग कर सही ढंग से होगा। बहादुरी के लिए – mlibby

40
> > The canonical way to do what you are trying is 

> % gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

क्षमा करें, लेकिन नहीं। यह एक आम गलत धारणा है, जो कि विशेष रूप से लिनक्स ईएलएफ-आधारित सिस्टम, ज्यादातर मामलों में काम करने के लिए होती है। विहित तरीका इस तरह अलग CFLAGS और पुस्तकालयों में पारित करने के लिए, कमांड लाइन पर सही और पारंपरिक स्थानों में, यह है:

gcc -Wall -o test `pkg-config --cflags glib-2.0` test.c `pkg-config --libs glib-2.0` 

यह एक दया है कि pkg-config दोनों --cflags और स्वीकार करता है - -लिब्स विकल्प एक ही समय में, जैसा कि इसका मतलब है कि यह गलत ज्ञापन कभी मर नहीं जाएगा, और लिनक्स पर इसका इस्तेमाल करने वाले लोग तब भी परेशान रहेंगे जब वे अन्य प्लेटफार्मों पर कोशिश करेंगे।

+1

+1! सभी विकल्पों के बाद सख्ती से स्रोत कोड फ़ाइल का नाम बोलना चाहिए। –

+6

क्षमा करें, लेकिन यह सच नहीं है। क्या आपने वास्तव में कुछ गैर-लिनक्स मंच पर ऐसा करने की कोशिश की है, उदाहरण के लिए मिनजीडब्ल्यू? उदाहरण के लिए देखें http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html जो स्पष्ट रूप से कहता है "यह एक फर्क पड़ता है जहां कमांड में आप यह विकल्प लिखते हैं; लिंकर पुस्तकालयों और ऑब्जेक्ट फ़ाइलों को खोजता है और संसाधित करता है क्रम में वे निर्दिष्ट हैं। इस प्रकार, 'foo.o -lz bar.o' फाइल foo.o के बाद लाइब्रेरी 'z' खोजता है लेकिन bar.o से पहले। यदि bar.o 'z' में फ़ंक्शंस को संदर्भित करता है, तो वे फ़ंक्शन हो सकते हैं लोड नहीं किया जाएगा "। – tml

7

@chris के रूप में कहा उपयोग pkg-config

glibconfig.h is missing 

क्योंकि इस फाइल /usr/include/glib-2.0 में नहीं है, यह है, लेकिन /usr/lib/glib-2.0. में तो तुम भी इस /usr/lib पथ शामिल करने के लिए है या कॉपी शामिल करने के लिए फ़ाइल/चिकना-2.0

0

मैं glib.h उपयोग कर रहा हूँ अच्छी तरह से क्या यह अपने सभी glib.h कार्यक्रमों :)

gcc pkg-config --cflags --libs glib-2.0 filename.c

संकलित करने के लिए के रूप में

pkg-config --cflags - libs glib-2 को घेरना सुनिश्चित करें।0 बैक-कोट्स जो आपको टिल्डे के अंतर्गत मिलता है (क्विर्टी कीबोर्ड पर सबसे अधिक कुंजी छोड़ दिया गया है)।

मुझे बाद में धन्यवाद ..: पी

+0

क्या आप अपने कोड में "' "डालने पर ध्यान देंगे। जो मुझे कुछ समय के लिए उलझन में था। अपना बाकी जवाब पढ़ने के लिए मेरी गलती नहीं दी, लेकिन कोड स्निपेट अब यह गलत है। – ALM

+0

ओह लानत। मैंने यह खो दिया... –

संबंधित मुद्दे