M.Onur ATÇI

Kişisel Web Günlüğü

Linux -1 : Paylaşılan Kütüphaneler

Linux üzerindeki deneyimlerimi anlatmak için yazılarımı yayınlamaya karar verdim. Zaman buldukça yazılara blogda yer vermeye çalışacağım. Bu makalelerden yararlanmak için hayatınızda birkez linux kurmuş ve konsoldan birkaç script yazmış, linux dosya sisteminin nasıl olduğunu biraz kavramış olmanız yeterlidir. LPIC exam 101 ve 102 konuları temel alınmıştır. Konuların ağırlıkları her makale sonunda verilecektir.

LINUX SHARED LIBRARIES
“Bu yazı linux paylaşılan kütüphaneleri üzerine yazılmıştır”
Linux altında bir programı derlediğinizde C dili için düşünürsek programcı printf() komutunu kullandığı zaman ekrana bir çıktı sağlanır ve bu printf fonksiyonunun yaptığı işi programcı yazmak zorıunda değildir. Çünkü programcı stdio.h kütüphanesini programına ekleyerek bazı alt seviye işlemleri bu kütüphane yardımıyla yaptırır, zamandan ve iş gücünden tasarruf eder. Aynı şekilde linux sistemimizde kullandığımız programlar da bu işleve benzer şekilde bazı kütüphaneleri kullanırlar.
Eğer çalıştırılabilir programlarımız bu tür fonksiyonları ya da yapıları içeren kütüphaneleri sistemden kopyalayıp çalıştırılabilir dosya içerisine ekliyorsa bu tür programlar static olarak bağlanmıştır deriz. Çünkü programımız tek başınadır ve çalışma zamanında ek bir bağlanma işlemine gereksinim duymaz. Bu tür bağlanmanın bazı dezavantajları vardır . En önemlisi programlarımız çok yer kaplar ve aynı tür programlar çalıştırıldığında aynı tür kütüphaneleri içereceklerinden hafızada aynı kütüphane birkaç defa yer alacaktır ve bu da bilgisayarımızın kaynaklarının verimsiz kullanımına yol açar.
Bu tür sorunlardan kaçınmak için programlar dinamik olarak bağlanırlar ve sadece çalışma zamanında belirli kütüphanelere bağlanırlar. Farklı programlar çalışma zamanında aynı kütüphanelere bağlandıkları için bu kütüphanelere paylaşılan kütüphaneler adı verilir.

Paylaşılan Kütüphaneye Bağımlılıklar
Bir program dinamik olarak bağlanmışsa en az birkaç paylaşılan kütüphaneye ihtiyaç duyacak demektir. Eğer program çalışma zamanında gerekli olan kütüphaneyi bulamazsa programda hata oluşur ve çöker. “ldd” aracı bu tür bağımlılıkları tesbit etmek için kullanılır. Syntax:
ldd program
şeklindedir.
Örnek olarak
$ ldd /bin/bash scripti ile bash shelinin bağımlılıklarını görebiliriz.
Paylaşılan Kütüphanelerin Bağlanması
Program yüklenirken dinamik paylaşılan nesne bağlayıcısı çalışır ve programın kullanacağı sl(shared library) varsa bunların bulunması ve bulunamayanlar için bir uyarı gösterilmesini ve programın çalışmamasını sağlar. Bu ld.so aracıdır. ld.so nun bakacağı yerler ise /usr/local/lib dizinidir. Biz kendi dizinlerimizi eklemek istersek shell değişkeni LD_LIBRARY_PATH a bu dizinleri eklememiz yeterlidir. Bir başka yol ise bu dizinlerin tutulduğu dosyaya ekleme yapmaktır. Bu dosya ikili dosyadır ve hızlı olarak okunur ld.so tarafından.
$ ldconfig [secenek] libdirs komutu ile bu dosyaya yeni dizinler ekleyebiliriz.
$ ldconfig -p scripti ile o anki kütüphaneleri görebiliriz. Sonucu filtrelemek için
$ ldconfig -p | grep Thread scriptine benzer şekilde sadece thread geçen kütüphaneleri görebiliriz.
Dinamik kütüphane önbelleğini yenilemek için ise
# ldconfid scriptini çalıştırırız.

LPI Weight : 3/8

***Önemli Not: Scriptlerin başında yer alan $ ve # işaretleri konsolu simgeler. Scriptleri denerken bu simgeleri yazmamalısınız. $ normal kullanıcıyı # ise süper user mod kullanıcıyı göstermektedir. Yani $ ile başlayan kodları direk yazabilirken # ile başlayan kodlar için yönetici haklarının alınması gerekmektedir(sudo komutunuz ya da su komutu ile konsolda süper user  oturumu açılabilir. Daha fazla bilgi için $man sudo ve $man su komutlarını deneyin.)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>