pkg-config

pkg-config, uygulamaları ve kütüphaneleri derlerken kullanılabilecek yardımcı bir araçtır. Sistemde kurulu olan kütüphaneleri sorgulamak için birleşik bir arayüz tanımlar.

Programcıların ve kurulum betiklerinin, kütüphane dosyalarının isimleri ve konumları gibi ayrıntılı bilgilere sahip olmadan da çalışmasını sağlar. Özellikle ilk defa karşılaşılan kütüphaneleri kullanan uygulamaları derlerken işleri kolaylaştırır.

pkg-config aslen Linux için tasarlanmış olsa da artık çeşitli BSD dağıtımları, Microsoft Windows, macOS ve Solaris gibi işletim sistemleri için de mevcuttur.

İlk gerçeklemesi James Henstridge tarafından kabuk betiği olarak yazılan, daha sonraysa Havoc Pennington tarafından GLib kütüphanesi kullanılarak C'de yeniden yazılan pkg-config, kütüphaneler hakkında aşağıda bazı örnekleri görülebilecek çeşitli bilgiler verir:
  • C veya C++ derleyicisi için parametreler
  • Bağlayıcı için parametreler
  • Söz konusu paketin sürümü
Bir RPM, deb veya başka bir ikili paketleme sistemi kullanılarak ya da kaynaktan derlenerek bir kütüphane yüklendiğinde bir .pc dosyası da sistemdeki diğer .pc dosyalarının bulunduğu dizine yüklenir.

Bu dosyanın birkaç girdisi vardır. Bu girdiler genellikle paketi kullanan programların da derlemesi için gereken bağımlı kütüphanelerin bir listesini içerir. Girdiler ayrıca genellikle başlık dosyalarının konumunu, sürüm bilgisini ve çeşitli açıklamaları da içerir.

Aşağıda Fedora'da /usr/lib64/pkgconfig/ dizininde bulunan çeşitli .pc dosyalarının içeriği görülebilir:

libpng:

prefix=/usr
exec_prefix=/usr
libdir=/usr/lib64
includedir=/usr/include/libpng16

Name: libpng
Description: Loads and saves PNG files
Version: 1.6.36
Requires: zlib
Libs: -L${libdir} -lpng16
Libs.private: -lm -lz -lm 
Cflags: -I${includedir}

OpenCV:

# Package Information for pkg-config

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.4
Libs: -L${exec_prefix}/lib64 -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cvv -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_viz -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_video -lopencv_plot -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lpthread -lrt -L/lib64 -lOpenGL -lGLX -lGLU -lClpSolver -lClp -lCoinUtils -lbz2 -lz -lm
Cflags: -I${includedir_old} -I${includedir_new}

İlk dosyada, libpng'nin kütüphanelerinin /usr/lib64 dizininde ve başlık dosyalarının da /usr/include/libpng16 dizininde bulunabileceği, kütüphane adının libpng olduğu ve sürümünün 1.6.36 olduğu bildirilmiştir. Ayrıca, bu kütüphaneyi kullanan kodları derlemek için gereken ek bağlayıcı seçenekleri de verilmiştir.

Derleme sırasında pkg-config'in kullanımına ilişkin birkaç örnek de aşağıda gösterilmiştir:

$ gcc -o test test.c $(pkg-config --libs --cflags libpng)

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

$ g++ image-sim.cpp `pkg-config --libs opencv`

Modern bilgisayar sistemleri, kullanıcıya uygulamalar sunmak için birçok katmanlı bileşen kullanır. Bu parçaları birleştirmedeki zorluklardan biri, onları uygun şekilde entegre etmektir. pkg-config sistemde kurulu kütüphaneler hakkındaki meta verileri toplar ve kolayca kullanabilmesi için kullanıcıya sunar.

pkg-config gibi bir meta veri sistemi olmadan bir bilgisayardaki servisler hakkında bilgileri bulmak ve bunları almak çok zor olabilir. Bir geliştiricinin kütüphane paketiyle birlikte pkg-config dosyaları sunması kütüphane UPA'sının benimsenmesini büyük ölçüde kolaylaştırır.

Kaynaklar ve Ek Okumalar

Yorumlar

Bu blogdaki popüler yayınlar

Diğer Dillerde Hoşçakal

Mızıka Tabları Nasıl Okunur

conio.h