Static Kütüphanelerin Yaratılması ve Kullanılması
Bilindiği gibi DOS’ta ve Windows’ta static kütüphaneler lib.exe ya da tlib.exe gibi
özel programlarla yaratılmaktadır. Aslında static kütüphane dosyalarının formatları .obj
modülleri tutan bir biçimdedir. Yani static kütüphaneler aslında .obj modüllerden
oluşmaktadır. Unix/Linux sistemlerinde de durum tamamen DOS ve Windows’ta olduğu
gibidir. Bu sistemlerde static kütüphaneler geleneksel olarak ar programı tarafından yaratılıp
organize edilirler. ar programının genel biçimi şöyledir:
ar <-seçenek> <.a dosya ismi> <.o dosya ismi>
Örneğin mylib.c içerisindeki fonksiyonları static kütüphaneye ekleyecek olalım. Önce dosya –
c switch’i ile derlenerek mylib.o oluşturulur. Sonra,
ar –r mylib.a mylib.o
biçiminde ekleme yapılır.
static kütüphaneler make dosyaları içerisinde ya da komut satırında doğrudan link aşamasına
katılırlar.
Anahtar notlar: cc ya da gcc derleyicileri default olarak derleme işleminden sonra ld
linker’ını çalıştırmaktadır. Yani gcc ya da cc switch’lerine ld linker switch’leri de eklenmiştir.
Aslında cc ya da gcc komut satırına .c, .cpp, .o, .a gibi dosyalar girilebilir. gcc ya da cc .o ve
.a uzantılı dosyaları linker’a iletmektedir.
Bir static kütüphanenin kullanılması iki biçimde yapılabilir.
1) static kütüphane dosyası komut satırı içerisinde açıkça belirtilir. Örneğin:
gcc –o use use.c mylib.a
Burada use.c içerisindeki add ve multiply fonksiyonları gerçekte mylib.a kütüphanesindedir.
2) –l switch’i ile .a dosyalarının önceden belirtilen bazı dizinlerde de aranması sağlanabilir.
Bunun için aranma dizini –L ile ayrıca belirtilebilir. gcc otomatik olarak bazı dizinlere
bakmaktadır. Örneğin, -l switch’ini izleyen kütüphane ismi şu biçimde belirlenir: Başına bir
lib eklenir ve .a uzantısı sona eklenir. Örneğin kütüphanenin ismi libc.a olsun. Biz bu
kütüphaneyi kullanmak için –lc yazmalıyız. –l ile kütüphane ismi bitişik yazılmalıdır.
Örneğin;
gcc –o use use.c –L. –lmylib
Burada use.c dosyası derlenecek, link aşamasında libmylib.a kütüphanesine
bakılacaktır. Ayrıca bulunulan dizin de arama işlemine dahil edilecektir.
Sınıf çalışması: Bir kütüphane dosyası hazırlayınız. Bir .c dosyasından bu kütüphane
içerisindeki fonksiyonları çağırınız ve link işlemine kütüphaneyi de dahil ediniz.
Anahtar notlar: file isimli program ile bir dosyanın formatı hakkında bilgi edinilebilir.
/* staticlib.c */
int add(int a, int b)
{
return a + b;
}
ar –r staticlib.a staticlib.o
/* usestaticlib.c */
#include <stdio.h>
int main()
{
printf(“%d”, add(3, 5));
return 0;
}
gcc –o usestaticlib usestaticlib.c staticlib.a
ar programının başka faydalı switch’leri de vardır. Örneğin –t switch’i ile kütüphane
içerisindeki amaç dosyalar görüntülenebilir.