Derleme Zamanında Kütüphanelerin Aranması
Statik bağlayıcıya gerekli kütüphaneler yol ifadeleriyle beraber geçirebildiği gibi yalnız isimleri de kullanılabilir. Yalnız isimlerinin geçirildiği durumda kütüphane dosyalarının nerede olduğu bilinemediğinden aranması gerekmektedir. Bağlayıcı öntanımlı olarak bazı dizinlere bakmaktadır. Ayrıca kullanıcının yeni arama dizinleri eklemesine izin verilmiştir. Yeni bir arama dizini eklemek için -L seçeneği kullanılmaktadır. Bu şekilde belirtilen dizinlere öngörülenlerden daha önce bakılmaktadır. -L seçeneği komut satırında istenilen sayıda kullanılabilmektedir. Kütüphane dosyalarının yalnız isimlerinin kullanılabilmesi için libXXX.so şeklinde isimlendirilmeleri gerekmektedir.
Basit bir örnek üzerinde bu durumu inceleyelim. Örnekleri sırasıyla driver.c ve test.c adlarıyla saklayabilirsiniz.
Kütüphane dosyamızı oluşturalım.
Uygulamamızı ilk olarak kütüphane dosyasını göstermeden derlemeyi deneyelim.
Bağlayıcı, foo fonksiyonunu bulamadığından şikayet etmekte. Bağlayıcı öntanımlı olarak baktığı dizinlerde foo tanımını içeren herhangi bir kütüphane (libtest.so) bulamadığından bu hata mesajını vermektedir. Bu durumda aşağıdaki yöntemleri kullanabiliriz. Öncesinde incelememizi kolaylaştırmak için bulunduğumuz dizinde lib isminde bir dizin oluşturup libtest.so dosyasını bu dizine taşıyalım.
1.
Kütüphane yol ifadesiyle beraber geçirilebilir.
2.
Kütüphane isminden önce aranacak dizinlere kütüphanenin bulunduğu dizin yolu eklenebilir. Kütüphane libXXX.so şeklinde isimlendirilmesi durumunda bağlayıcıya -lXXX şeklinde geçirilmelidir.
Bağlayıcı tarafından bakılan tüm dizin kümesini merak edebilirsiniz. Bağlayıcının öntamımlı olarak baktığı arama dizinleri, içsel olarak kullanıdığı bağlayıcı betiğinde (linker script) tanımlanmıştır. Bu dizinleri aşağıdaki gibi öğrenebiliriz.
gcc ile derleme işlemi yaparken --verbose seçeneğinin geçirilmesi durumunda, bağlayıcıya çok sayıda -L anahtarıyla dizin yolunun geçirildiğini görmekteyiz. gcc tarafından ilave olarak bağlayıcıya geçirilen arama dizin listesine de aşağıdaki gibi ulaşabiliriz.
Ayrıca tüm bu dizinlerden önce siz de komut satırında -L ile istediğiniz dizinlerin aranmasını sağlayabilirsiniz.
Last updated
Was this helpful?