• Çalışmalarım

  • Favori Linklerim

  • Önemli Yazılarım

  • Kategoriler

  • Hit Counter

    • 27,286 hits

pkg-config

Linux’ta bir programı kaynak kodundan derlerken bazen hatta çoğu zaman ./configure aşamasında, PKG_CONFIG yolu üzerinde şu isimdeki kütüphane yoktur gibi hatalar ile derleme işlemi yarıda kalır.
Peki nedir bu PKG_CONFIG ayarı ? PKG_CONFIG ayarı aslında derlemeye çalıştığımız program için gerekli kütüphanelerin nerelerde olduğu bilgisini tutan bir programın sağladığı ayardır.”pkg-config” isimli program kendisine ait bir klasör içinde sistemdeki kütüphaneler ile ilgili yol bilgilerini, ilgili kütüphanenin başka hangi kütüphaneler gerektirdiği bilgilerini “kütüphane-genel-adı-sürüm_no.pc” isimli bir dosya içinde saklar.
pkg-config’ten nasıl yararlanıldığı ile ilgili bir örnek pkg-configi anlamamızı kolaylaştırır.

#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
GtkWidget *window;

gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (window), “destroy”,
G_CALLBACK (destroy), NULL);
gtk_widget_show (window);
gtk_main ();
return 0;
}

kodunu yazıp test.c adıyla kaydedip derlemek istersek, bu kodda yer alan gtk_main() vs gibi gtk fonksiyonları test.c içinde yer almadığı için bir yerden almamız gerekli işte bu noktada devreye gcc nin -I parametresi girer -I ile içeri alınacak .h dosyalarına bir yol belirtiriz bir den fazla -I belirtebiliriz yani yol sayısını arttırırız.
Sistemimde gtk.h header dosyası /usr/include/gtk-2.0 ana dizini altında yer alıyor.
test.c yi “gcc -c test.c -I/usr/include/gtk-2.0″ şeklinde derlersek eğer başka bir kütüphane gerekliliği yoksa kod derlenecektir ve bir test.o nesne dosyası oluşacaktır.
Bundan sonra çalıştırılabilir dosyayı yaratma aşaması gelir. derleme sırasında gtk kütüphanesine ait .o uzantılı dosyaların gcc tarafından görülmesi gereklidir. bunun için gcc -L -l gibi nesne kütüphanelerinin yolunu belirtmemizi sağlayan parametrelere sahiptir. -l parametresi ile kütüphane dosyasının adını belirtiriz ve gcc nin nesne dosyası arama yolu üzerinde ise bulur ve derlemeye dahil eder.
Çalıştırılabilir dosya elde etmek için, gcc -o prog_adi test.o -lgtk+-2.0 komutunu vermek gereklidir.Fakat bu son komut gtk+-2.0 kütüphanesinin ihtiyaç duyacağı diğer kütüphaneleri dahil etmez bu yüzden büyük ihtimalle program oluşmaz.
İşte bu karışık derleme işlemini daha basit hale getirmek, gerekli kütüphaneleri derleme işlemine kolayca kaatbilmek için pkg-config programı yazılmıştır. pkg-config genelde /usr/lib/pkgconfig altında bulunan bir klasör içinde sistemdeki kütüphanelerin adları ile ilişkili bir .pc uzantılı dosya içinde derleme aşamasında gerekli yol ve bağımlılık bilgilerini tutar. Eğer bir pc dosyasını açarsanız bunu daha iyi anlarsınız.
Derleme sırasında pkg-config’ten şu şekilde yararlanılır:
gcc -c test.c `pkg-config –cflags gtk+-2.0`
gcc -o prog_adi test.o `pkg-config –libs gtk+-2.0`

yani pkg-config –cflags kütüphane_adi dersek kütüphanenin header dosyalarının yollarını alırız, pkg-config –libs kütüphane_adi dersek kütüphanenin .o .so gibi nesne dosyalarının yollarını alırız.
Derleme sırasında aldığımız hata da hata veren kütüphanenin ya yüklenmemiş olması ya da pkg-config içerisinde bir .pc girdisine sahip olmamasındandır.

Yorum Yapın