/* * Copyright (c) 2004 Bar�� ��M�EK. * Permission is granted to copy, distribute and/or modify this document * under the terms of the GNU Free Documentation License, Version 1.2 * or any later version published by the Free Software Foundation; * with no Invariant Sections, no Front-Cover Texts, and no Back-Cover * Texts. A copy of the license is included in the section entitled "GNU * Free Documentation License". * * Bu belgenin telif haklar� 'GNU Free Documentation License' * lisans� �artlar� alt�nda Bar�� ��M�EK'e aittir. * * K�k: http://www.acikkod.org * S�r�m No: 1 * �lk bask�: 2004-08-18 * Son g�ncelleme: 2004-08-18 * */
Program kütüphaneleri, daha sonra yeni yaz�lacak programlara dahil edilmek üzere saklanan derlenmi� haz�r kod ve veri dosyalar�d�r. Kütüphane dosyalar�, modüler programlama sunarlar.
Statik kütüphaneler, yeniden derlenmeye ihtiyaç duymaks�z�n programa derleme a�amas�nda yani çal��t�r�lmadan önce eklenir. Lib dizinlerindeki “.a” uzant�l� dosyalar statik kütüphanelerdir. Derleme zaman�n� azaltmak için statik kütüphaneler kullan�l�yordu. Ancak günümüzün h�zl� bilgisayarlar� için derleme zaman� problem olmaktan ç�kt�. Bu nedenle statik kütüphaneler art�k tercih edilmemektedir. Ancak yine de kütüphane kodlar�n� açmak istemeyenler için kullan��l�d�r.
Statik kütüphane olu�turmak için ar(1) komutu kullan�l�r.
# ar rc libtest.a test.o util.o |
Bu komut “libtest.a” kütüphanesini olu�turur, test.o ve util.o object dosyalar�n� bu kütüphaneye ekler. “c” parametresi ile e�er kütüphane yoksa olu�turulmas� belirtilmi� olunur. E�er varsa object dosylar� bu kütüphaneye ekler. “r” parametresi ile eski object dosyalar�n yenileri ile de�i�tirilmesi talep edilir.
Yeni olu�turulan veya de�i�tirilen bir kütüphane dosyas�n� yeniden indekslemek gerekir. Bu i�lem derleme s�ras�nda derleyicinin sembolleri kontrolünü h�zland�rmak içindir. �ndeks olu�turmak için ranlib(1) kullan�l�r.
# ranlib libtest.a |
Derlenecek bir programa daha önce olu�turdu�umuz bir kütüphaneyi dahil etmek için gcc(1) ‘ye –l ile kütüphane ismi parametre olarak verilmelidir. Bu i�lem için tercih edilmese de do�rudan ld(1) kullan�labilir.
# gcc prog.o –L/home/simsek/libtest –ltest |
-l ile kütüphane ismini verirken dosya isminin ba��ndaki “lib” in kald�r�ld���na dikkat edilmeli. –L parametresi gcc'ye kütüphaneleri ararken hangi dizinleri kullanaca��n� bildirir.
A�a��da bir kütüphane olu�turma ve kullanma senaryosu mevcut:
# cat main.c #include <stdio.h> /* fonksiyonlar external tanimlanmali */ extern void test(); extern void util(); int main() { printf("main icinde\n"); /* Kutuphane icinden fonksiyon cagiralim */ test(); util(); return 0; } # cat test.c int test() { printf("Test icerisinde\n"); return 0; } # cat util.c int util() { printf("Util icerisinde\n"); return 0; } # gcc -c test.c # gcc –c util.c # ar rc libtest.a test.o util.o # ranlib libtest.a # gcc -c main.c # gcc main.o -L /home/simsek -ltest -o testprog |
Son sat�rda kütüphane fonksiyonlar�n� kullanan program derlenip ‘testprog' isimli çal��abilir dosya derleyici taraf�ndan olu�turuldu. Program çal���t�r�ld���nda a�a��daki ç�kt�y� verecektir:
# ./testprog main icinde Test icerisinde Util icerisinde |
Payla��lan (shared) kütüphaneler, program çal��t�r�ld���nda programa dahil edilirler. Program�n içerisine gerçekten kod eklenmez. Payla��ml� kütüphaneden bir fonksiyon ca�r�lan yerlere, kütüphaneye bir referans verilir. Kütüphaneyi kullanan bütün programlar bu �ekilde ayn� fonksiyon kütüphanesini ortak kullan�rlar.
Payla��ml� her kütüphane “soname” denilen özel isme sahiptir. “soname” isimleri gerçek isimlerine bir linktir. Ayr�ca derleyicinin bir kütüphaneyi talep etti�inde kulland��� linker ismi vard�r. Bu, versiyonu olmayan bir soname olarak dü�ünülebilir.
s[email protected]:/usr/lib$ ls libz* libz.a libz.so.1@ libz.so.1.2.1.1* |
Listede görülen libz.a statik kütüphaneye aittir. libz.so.1 ise libz.so.1.2.1.1 payla��ml� kütüphanesine link olan soname'dir. Bu kütüphane için linker ismi libz.so'dur.
Programlar içerisinde soname'ler tutulur. Bu sayede kütüphanede bir de�i�iklik yap�ld���nda yeni kütüphane kullan�ma al�nm�� olunur.