2009-07-17 27 views
41

Yani burada dünyanın en basit glib program:Neden glib için "merhaba dünya" yapılamıyorum?

#include <glib.h> 

Ben gcc test.c ile derlemek deneyin ve alıyorum:

# 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 

Yani ben doğru paketler olduğundan emin olun

Daha sonra/usr/include altındaki herhangi bir yerde "glib.h" araması yapıyorum. İki tane al, /usr/include/glib-1.2/glib.h ve /usr/include/glib-2.0/glib.h. Bu yüzden denemek:

$ 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 

(snipped yaklaşık 10.000 fazla hata)

yerde benim bilgisayarda bir glibconfig.h sahip görünmemektedir.

Şimdi ne yapmalıyım?

+1

Belki sadece saçma davranıyorum P ama neden bir başlık derlemeye çalışıyoruz:

.. Sonra teşekkür? – GManNickG

+14

Daha karmaşık bir programla başladım, ancak "#include " çalışmayacaksa hiçbir şey olmayacak. – mike

+0

Ana bir işleviniz yoksa, * çalışmaz *. 'Glib.h'nizi' stdio.h' ile değiştirmek de işe yaramıyor. Ana fonksiyonunuz varsayarsak, doğru cevabı diğer cevapta belirtildiği gibi 'pkg-config' kullanmaktır. –

cevap

49

glib kendini gizleme eğilimindedir ... GCC otomatik olarak alt dizinleri aramadığı için glib-1.2 veya glib-2.0'da glib.h dosyasını göremediğinden içerme ifadeniz çalışmaz.

GLIB kılavuzlarında Compiling GLib Applications sayfasını okuyun ... GCC için doğru bayrakları almak için pkg-config --cflags glib-2.0 gibi komutları kullanın.

çalıştığınız şeyi yapmak kurallı yolu

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

Not "yerinde" pkg-config komutu çalıştırmak için kabuk söylemek arka kene vardır.

+3

Bu gizleme yapmıyor: glibconfig.h, arkeye bağlı verilerin bir listesidir ve bu nedenle/usr/include ile ilgili değildir. Yaygın olarak/usr/lib/glib2/... – ntd

+0

[This] (http://askubuntu.com/a/90342) benim için çalıştı. – gkiko

-2

apt-get build-dep arkadaşınız - hiç kimse bir şeyler inşa etmek için ihtiyaç duyduğunuz tüm paketleri hatırlayamıyor.

+2

dosya orada provably, bu yüzden Debian özgü bir paket yönetim komutu sorunu çözmek için gitmiyor. 'pkg-config' kullanarak doğru şekilde kullanır. Cesaret için – 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` 

Üzgünüz, ama hayır. Bu yaygın bir yanlış anlamadır, sadece Linux, özellikle de ELF tabanlı sistemler üzerinde çoğu durumda işe yarayacaktır. kanonik yolu, bu gibi komut satırında doğru ve geleneksel yerlerde, ayrı ayrı CFLAGS ve kütüphanelerde geçmektir:

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

Bu pkg-config --cflags ve hem kabul ettiğini üzücü - -libs seçenekleri aynı zamanda, bu yanlış maşanın asla ölmeyeceği ve Linux'ta kullandığı insanların diğer platformlarda aynı şeyi denediğinde şaşkın olmaya devam edeceği anlamına gelir. @chris olarak

+1

+1! Tam olarak, kaynak kod dosyasının adı tüm seçeneklerden sonra bitmelidir. –

+6

Üzgünüz, ama bu doğru değil. Aslında, Linux gibi bazı platformlarda böyle çalışmayı denediniz mi, örneğin MinGW? Bkz. Http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html açıkça belirten "Komutta bu seçeneği yazdığınızda bir fark yaratır; linker kütüphaneleri ve nesne dosyalarını arar ve işler. Bu nedenle, foo.o -lz bar.o 'foo.o -lz bar.o' foo.o dosyasından sonra ancak bar.o'dan sonra 'z' kütüphanesini arar. Eğer bar.o 'z' fonksiyonlarına karşılık gelirse, bu fonksiyonlar yüklenemedi ". – tml

7

söyledi kullanım pkg-config

glibconfig.h is missing 

bu dosya /usr/include/glib-2.0 olmadığı için bu, ama /usr/lib/glib-2.0. Yani siz de bu /usr/lib yolunu eklemek zorunda veya dosya eklemek kopya/konuşkan-2,0

0

Ben iyi-tüm glib.h programlarını :)

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

derlemek için bunu yapın olarak glib.h kullanıyorum

pkg-config --cflags --libs glib-2'yi çevrelediğinizden emin olun.0 tilde altında bulunan arka tırnak işaretleri ile (kısayol tuş takımında en fazla tuş).

+0

kodunuza "' "koymanızı ister misiniz? bir süredir kafamı karıştırdı. Cevabınızın geri kalanını okumadığınız için benim hatamı verdim, ancak kod pasajı artık olduğu gibi yanlış. – ALM

+0

oh lanet. Onu özledim... –