Statik kütüphaneler, yeniden derlenmeye ihtiyaç duymaksızın yazılıma 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 yakın geçmişe kadar statik kütüphaneler kullanılıyordu. Ancak günümüzün hızlı bilgisayarları için derleme zamanı sorun 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 nesne dosyalarını bu kütüphaneye ekler. c seçeneği ile eğer kütüphane yoksa oluşturulması belirtilmiş olunur. Eğer varsa nesne dosylarını bu kütüphaneye ekler. r seçeneği ile eski nesne dosyalarını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 denetlemesini hızlandırmak içindir. İndeks oluşturmak için ranlib(1) kullanılır.
Derlenecek bir yazılıma daha önce oluşturduğumuz bir kütüphaneyi dahil etmek için gcc‘ye –l seçeneği 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 seçeneği ile gcc'ye kütüphaneleri ararken hangi dizinleri kullanacağı bildirilir.
Aşağıda bir kütüphane oluşturma ve kullanma senaryosu mevcut:
# cat main.c
#include <stdio.h>
/* işlevler external bildirilmeli */
extern void test();
extern void util();
int main() {
printf("main içinde\n");
/* Kütüphane içinden işlev çağıralım */
test();
util();
return 0;
}
# cat test.c
int test() {
printf("Test içerisinde\n");
return 0;
}
# cat util.c
int util() {
printf("Util içerisinde\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 işlevlerini kullanan yazılım derlenip testprog isimli çalışabilir dosya derleyici tarafından oluşturuldu. testprog çalıştırıldığında aşağıdaki çıktıyı verecektir:
# ./testprog
main içinde
Test içerisinde
Util içerisinde