Home Index Search Links About Us
  News   Archives   Companies   Tips  

Payla��ml� Kitapl�klar�n Yap�m�

Yazar: Luis Colorado

�eviri: Emre Demiralp


S�re�

Tarih�e

Kitapl�k

T�rler

Ba�lama ��lemleri

link

soname

ldconfig

Kitapl�k Yap�m�

Derleme

Ba�lama

Kurulum (Devinimli)

Dura�an

Kaynaklar

Kurulum (Dura�an)

Devinimliye kar�� Dura�an Ba�lant�

1.- Bir program �retme s�reci. Giri�. 

Bug�nlerde geli�tirme �evrelerinde bir program �retme s�reci, programc�lar�n ve tasar�mc�lar�n, al��kanl�k ve deneyimlerde ya�ad�klar�, evrimin meyvesidir.

Bu s�re� a�a��daki ad�mlardan olu�ur:

  • Kaynakyaz�l�m�n bir metin dosyad�zenleyicisi yard�m�yla y�ksek d�zeyli bir dilde yarat�m�. �ok b�y�k programlar�n i�lenmeleri, tek bir dosya i�inde tutulmak istenmeleri durumunda, olduk�a zordur. Bu nedenle, kaynakyaz�l�m, birka� kaynakyaz�l�mdan olu�turulmu� i�levsel mod�llere b�l�n�rler. Bu mod�llerdeki kaynakyaz�l�m�n, baz� dillerin belirgin bir g�revi di�erlerinden daha iyi yapabilmeleri nedeniyle, ayn� dilde yaz�lma zorunlulu�u yoktur.

  • Program i�in kaynakyaz�l�m dosyalar�n�n, yarat�l�mdan sonra, nesnel d�zg� (object code) olarak adland�r�labilen ve makinenin yerine getirebilece�i, d�zg� kesimlerine (segment of code) d�n��t�r�lmesi gerekir. Bu d�zg� (kod), makinenin do�rudan yerine getirebilece�i g�d�mlerde yaz�lm�� olmakla birlikte kaynakyaz�l�mla ayn� i�lemleri yerine getirir. Kaynakyaz�l�m�n nesnel d�zg�ye d�n��t�r�lme s�reci derleme (compilation) olarak bilinir. Derleme birimler taraf�ndan ger�ekle�tirilir ve bir derleme oturumu, derleyiciye ba�l� olarak, program�n bir par�as�n� ve genelde yaln�zca bir ya da birka� dosyay� i�erir. Derlenmi� nesnel d�zg�, hen�z d�n��t�r�lm�� olan program�n genel par�as� i�indeki program, altyordam, de�i�kenleri i�erir ve bir sonraki a�amaya aktar�r.

  • Program i�in makine dilindeki dosyalar�n t�m�n�n �retilmesinden sonra bunlar�n ba�lay�c� ad� verilen �zel bir olanak arac�l���yla birle�tirilmesine y�nlenilir. Bu s�re�te, bir mod�lde kullan�lan g�d�mlerle bir ba�ka mod�lden �a�r�lan (altyordam �a�r�lar� ya da ba�ka mod�llere ait olan ya da ba�ka mod�llerde tan�mlanan de�i�kenlere yap�lan g�ndermeler gibi) t�m i�levler "b�t�nselle�tirilir. B�ylece olu�an yap� normal olarak do�rudan y�klenebilen ve ko�ulabilen bir programd�r.

  • Bir program�n �al��t�r�lmas� i�letim sisteminin �nemli bir par�as� olan bir yaz�l�m par�as� taraf�ndan ger�ekle�tirilir. Bu yaz�l�m par�as�, Linux durumunda exec() sistem �a�r� fonksiyonudur. Bu fonksiyon dosyay� bulur, s�re�lere bellek atamas� yapar, dosya i�eri�inin ( g�d�mleri ve de�i�kenlerin ba�lang�� de�erlerini i�eren ) �zel par�alar�n� y�kler ve programda 'metin' (text) olarak genellikle �al��t�r�labilen dosyan�n kendisinde g�sterilen noktada denetimi M�B (Merkezi ��lem Birimi)'ne aktar�r.

2.- Program �retim s�re�lerinin k�sa tarih�esi. 

Program �retim s�re�leri, daima en etkin �al��t�r�labilen programa eri�mek ya da sistem kaynaklar�n� en iyi bi�imde kullanmak i�in s�rekli bir evrim ge�irmektedir.

Ba�lang��ta, programlar do�rudan makine dilinde yaz�l�rd�. Sonralar�, daha y�ksek d�zeyli bir dilde program yazma ve yaz�lan program�n makine diline �evrilmesinin, �evirme'nin sistematik do�as� nedeniyle, �zdevimlile�tirilebilece�i (otomatikle�tirilebilece�i) anla��lm��t�r. Bu durum, yaz�l�m �retkenli�ini artt�rm��t�r.

Programlar�n derlenebilmesinin g�ndeme gelmesiyle ( Burada derlemenin evrimini �ok basitle�tirmi� bulunmaktay�m, ger�ekte bug�nlere gelinebilmesi, derleme olay�n�n �ok karma��k bir s�re� olmas�ndan dolay�, at�lmas� �ok g�� ger�ekle�tirilebilmi� bir ad�md� ), program �retim s�reci program g�d�mlerinin i�erildi�i bir kaynak dosyas�n�n yarat�lmas�, onun derlenmesi ve son ad�m olarak da �al��t�r�lmas� a�amalar�ndan olu�ur duruma gelmi�tir.

FORTRAN kullan�m�yla g�r�ld��� �zere, k�sa bir s�re sonra, derleme s�recinin ederi �ok y�ksek oldu�u ve �ok fazla kaynak kullan�m� ve M�B (Merkezi ��lem Birimi) gerektirdi�i ve bu programlarda i�erilen bir�ok fonksiyonun �e�itli programlarda yinelenerek defalarca kullan�ld��� ortaya ��kar�lm��t�r. �stelik, birilerinin programlar�nda de�i�iklik yapmalar� durumunda, derleme, de�i�iklik yap�lan kesimi derlemek i�in t�m kaynak yaz�l�m�n yeniden makine diline �evrilmek �zere derleyiciye verilece�i anlam�na gelmekteydi.

Bu durum, mod�llerle derlemenin g�ndeme getirilmesinin nedeni olmu�tur. Bu s�re�, anaprogram�n bir yana, s�k s�k defalarca kullan�lan ve �nceden derlenip ( bir kitapl�k �nc�s� gibi nitelendirebilece�imiz ) �zel bir yerde belgeliklenmi� (ar�ivlenmi�) fonsiyonlar� bir yana ayr�lmas� temeline dayan�r.

Fazladan �aba g�stererek programlar�n� defalarca devreye sokmaks�z�n programlar da yaz�labilirdi. O zaman bile, program�n ba�lanma s�recinde t�m par�alar�n birle�tirilmesinin gereklili�i ve bu i�levin programc� taraf�ndan yerine getirilme zorunlulu�unun ortaya ��kmas� nedeniyle, s�re� karma��k olacakt� ( Par�a birle�tirmedeki s�k�nt�, bilinen bir fonksiyonun kullan�lmas� durumunda bilinmeyen bir fonksiyonun devreye sokulma gereksiniminin ortaya ��kabilmesidir )


3.- Kitapl�k Nedir?

Yukar�da s�z� edilen sorun Kitapl�klar�n yarat�lmas�na yola�m��t�r. Kitapl�k, �zel bir t�r dosyadan ba�ka bir�ey de�ildir. Daha a��k konu�mak gerekirse, onun tar(1) ya da cpio(1) t�r� bir belgelik (ar�iv) oldu�unu s�yleyebiliriz. Bu dosya, ba�lay�c�n�n dosya bi�imini anlayabilece�i �zg�n nitelikler i�erir. Kitapl�k belgeli�i (ar�ivi) belirtildi�inde BA�LAYICI YALNIZCA PROGRAMIN GEREKT�RD��� MOD�LLER� SE�ER, bunlar�n d���nda ba�ka bir �eyi devreye sokmaz. Yeni g�ndeme gelen bir ba�ka yarar, art�k b�y�k fonksiyon kitapl�klar�n�n kullan�labilmesi ve programlay�c�n�n kitapl�k i�indeki t�m fonksiyonlararas� ili�kileri bilmek zorunda kalmaktan kurtar�lmas� olmu�tur.

S�z�n� etmekte oldu�umuz kitapl�k bundan daha fazla geli�mi� de�ildir. O, yaln�zca, belgeli�in (ar�ivin) ba�lang�c�nda yeralan yeni �zel bir dosyayla donat�lm��t�r. Bu dosya mod�llerin ve kimliklendiricilerin betimlendi�i bir yap� ta��r. Bu dosya yard�m�yla, ba�lay�c� kitapl���n t�m�n� okumak zorunda kalmaks�z�n fonksiyon ��z�mlemesini ger�ekle�tirir. B�ylece kitapl���n defalarca okunmas�na gerek kalmam�� olur. Bu, simge �izelgelerinin kitapl�k belgeli�ine (ar�ivine) eklenmesi s�reci Linux'ta ranlib(1) g�d�m� taraf�ndan ger�ekle�tirilir. B�ylece tan�mlanan kitapl�klar DURA�AN K�TAPLIKLAR olarak bilinirler.

�lk �okg�revli sistemlerin devreye sokulmas�yla yeni bir geli�me, yaz�l�m payla��m� g�ndeme getirilmi�tir. Ayn� sistemde, ayn� yaz�l�m�n iki kopyas� birden devreye sokuldu�unda iki s�recin ayn� yaz�l�m� payla�mas� ilgin� g�z�km��t�r. ��nk�, bunun ger�ekle�mesi durumunda, bir program�n kendi kendini de�i�tirmemesinden dolay� bellekte �ok say�da kopyan�n tutulmas�na gereksinim kalmayaca�� d���n�lm��t�r. Bu d���nce �ok kullan�c�l� dev sistemlerde b�y�k tutarlarda bellek korunumuna olanak sa�lam��t�r.

Bu yenili�in bir ad�m �tesi olarak birisi (kim oldu�unu bilmiyorum ama d���nce ger�ekten b�y�kt� ;-) bir�ok program�n kendileri farkl� olmakla birlikte ayn� kitapl��� kulland�klar�n� d���nm��t�r. Bu yap�da bir program�n kulland��� kitapl�k kesimiyle bir di�erinin kulland��� kitapl�k kesimi ayn� olmak zorunda de�ildi. �stelik anayaz�l�m da ayn� de�ildi (farkl� programlar), dolay�s�yla, onlar�n metinleri de payla��lmamaktayd�. Bu durumda, s�z� edilen birey, ayn� kitapl��� kullanan farkl� programlar b�yle bir kitapl�k payla��m�na girebilirse, bellek kullan�m� azalt�labilecekti. Bug�n, art�k, farkl� programlar, �zde� program metnine sahip olmaks�z�n kitapl�k yaz�l�mlar�n� payla�abilmektedirler.

Bununla beraber, art�k, s�re� daha da karma��kla�m��t�r. �al��t�r�labilir program art�k b�t�n�yle bir ba�lant� olmay�p kitapl�k kimliklendiricilerine ba�vurma, program y�kleme s�recine ertelenmektedir. Ba�lay�c� (Linux durumunda ld(1)) payla��ml� bir kitapl�k kullan�m�n�n s�z konusu oldu�unu alg�lay�p programa kendi d�zg�s�n� (kodunu) yerle�tirmez. Sistemin kendisi, yani �ekirdek, exec() program�n� devreye sokarken payla��ml� kitapl�k kullanan bir yaz�l�m�n devreye sokuldu�unu alg�lar (Bu i�i, payla��ml� kitapl��� kendi metnine atayarak, kitapl�k de�erleri i�in �zel bellek atamas� yaparak, vb.. ger�ekle�tirir.) �al��t�r�labilir bir dosyan�n y�klenmesi durumunda bu s�re� ger�ekle�tirilir ve t�m i�lem art�k daha karma��k hale gelmi�tir.

Ba�lay�c� normal bir kitapl�kla kar��la�t���nda, ku�kusuz, eskiden oldu�u gibi davran�r.

Payla��ml� kitapl�k nesnel yaz�l�m i�eren dosyalardan olu�an bir belgelik (ar�iv) olmaktan �ok nesnel yaz�l�m� i�eren tek bir dosya gibidir. Ba�lay�c�, payla��ml� kitapl��� bir program� ba�larken, kitapl�k i�inde hangi mod�l�n kitapl��a eklenip eklenmedi�iyle ilgilenmez, yaln�zca, ��z�mlenmemi� kaynaklar�n ��z�mlenmesini sa�lar ve bunlardan hangilerinin kitapl���n i�erilmesi durumunda dizelgeye (listeye) eklenmesi gerekti�ini saptar. T�m payla��ml� kitapl�klar� i�eren bir belgelik (ar�iv) ar(1) kitapl��� ilke olarak olu�turulabilse de bu yola s�k s�k ba�vurulmaz. ��nk�, payla��ml� bir kitapl�k, genellikle, �e�itli mod�llerin ba�lanmas�n�n bir sonucudur ve bu y�zden kitapl�k, daha sonra, �al��t�rma s�resince gerekecektir. Payla��ml� kitapl�k deyimi bu yap� i�in, belki de, en iyi ad de�ildir ve de bu yap�y� payla��ml� nesne olarak adland�rmak daha yerinde olacakt�r. (Ancak, bu di�er ad� kullanma e�iliminde de�iliz.)


4.- Kitapl�k T�rleri.

Biraz �nce s�z�n� etti�imiz gibi Linux alt�nda iki t�r kitapl�k vard�r; dura�an ve payla��ml�. Dura�an kitapl�klar ar(1) yaz�l�m�yla bir belgelik (ar�iv) i�ine al�nm�� ve ranlib yaz�l�m�yla da indislenmi� olan mod�ller toplulu�udur. Bu mod�ller, �o�unlukla, ad�n�n sonunda uyla��m olarak .a bulunan bir dosya i�inde tutulurlar. (Linux alt�nda dosya uzant�s� kavram� s�z konusu olmad���ndan uzant� terimini kullanmayaca��m.) Ba�lay�c� addaki .a kesimini ve sanki dura�an bir kitapl�k s�z konusuymu� gibi, ��z�mlenmemi� kaynaklar� ��z�mleyen mod�lleri se�ip programa ekleyerek mod�l aray���na ba�lar.

Payla��ml� kitapl�klar ise, tersine, belgelik (ar�iv) olmay�p �zel bir d�zg� (kod) (kendilerini payla��ml� kitapl�k olarak tan�mlayan) taraf�ndan imlenen (i�aretlenebilen) yeniden d�zenlenebilir nesnelerdir. Ba�lay�c� ld(1), s�z� edildi�i gibi, program kaynak yap�s�na mod�lleri eklemez. Ama kitapl�k taraf�ndan sa�lanan kimliklendiricileri ��z�mlemi� gibi onlar� se�er, kitapl�k taraf�ndan tan�t�lanlar� ekler ve bu durumda izlenimi vermeye �al��an di�er kaynak yaz�l�mlar� eklemeksizin i�ini s�rd�r�r. Ba�lay�c� ld(1) payla��ml� bir kitapl��� ad sonundaki .so kesiminden alg�layabilir (.so.xxx.yyy kesimine bakmaz, bu noktaya daha sonra de�inece�iz).


5.- Linux Alt�nda Ba�lanma ��lemleri.

Nesnel mod�ller i�eren her program �al��t�r�labilen (executable) olu�turmak �zere ba�lant�ya sokulur. Bu i�lem, Linux ba�lay�c�s� olan, ld(1) taraf�ndan ger�ekle�tirilir.

ld(1), davran���n� yeniden d�zenleme olana�� veren t�rl� se�enekleri destekler. Ancak, burada yaln�zca kitapl�k kullan�m�yla genelde ilgili olan se�enekleri g�ndeme alaca��z. ld(1) do�rudan kullan�c� taraf�ndan etkinle�tirilmek yerine derleyicinin kendisi, gcc(1) taraf�ndan, derleme s�recinin son a�amas�nda devreye sokulur. Onun kullan�m yolu hakk�nda y�zeysel bir bilgi kitapl�klar�n Linux alt�nda kullan�mlar�n�n anla��lmas�nda bize yard�mc� olacakt�r.

ld(1), i�levini yerine getirebilmek i�in, programa ba�lanacak olan nesnelerin dizelgesine (listesine) gereksinim duyar. Bu nesneler, daha �nceden s�zetti�imiz uyla��ma, yani payla��ml� kitapl�klar�n ad sonlar�nda .so (.so.xxx.yyy de�il) dura�an kitapl�klar�n ad sonlar�nda .a (ve ku�kusuz, basit nesne dosyalar�n ad sonlar�nda .o) kesimlerinin bulunmas� uyla��m�na, uymak ko�uluyla, herhangi bir s�rada(*) verilebilir ve �a�r�labilirler.

(*) Bu b�t�n�yle do�ru de�ildir. ld(1), yaln�zca, kaynaklar� kitapl�k i�erimi an�nda ��z�mleyen mod�lleri kapsama al�r. O anda, daha sonra kapsama al�nacak bir mod�l taraf�ndan g�ndeme getirilecek kaynaklar bulunabilir. Bu kitapl���n kapsama al�nma an�nda bu kaynaklar hen�z ortal�kta g�r�nmediklerinden i�erilmede karga�aya neden olabilirler. Dolay�s�yla kitapl�klar�n kapsama al�nma s�ras� �nem kazanabilir.

�te yandan, ld(1)'nin -l ve -L se�enekleri �l��nl� (standart) kitapl�klar�n i�erilmesine olanak sa�lar.

Amaaa ... Acaba �l��nl� (standart) kitapl�ktan ne anlamaktay�z, fark nedir? Hi�bir �ey! Tek �nemli nokta, ld(1)'in �l��nl� (standart) kitapl�klar� �nceden belirlenmi� yerlerde aramas�, parametre dizelgelerinde (listelerinde) nesne olarak g�z�kenleri ise dosya adlar�n� kullanarak bulmaya �abalamas�d�r.

Kitapl�klar benimsenmi� olarak /lib ve /usr/lib dizinlerinde (ld(1)'nin yap� ve s�r�m�ne ba�l� olarak baz� ek konumlar�n da kullan�ld���n� duymakla beraber) aran�r. -L ola�an kitapl�k aramas�nda kullan�lanlara dizin ekleme olana�� sa�lar. Kullan�m, eklenecek her yeni dizin i�in -L dizin yazarak ger�ekle�tirilir. �l��nl� (standart) kitapl�klar, Ad y�klenecek kitapl��� belirtmek �zere, -l Ad se�ene�iyle belirtilirler. ld(1) aramay� ilgili dizinlerde s�rayla yapar. Her bir dizinde, �nce libAd.so dosyaad� aran�r. Bulunamazsa, libAd.a ve onun dura�an kar��l��� denenir.

ld(1)'in libAd.so dosyas�n� bulmas� durumunda, ba�lant� payla��ml� kitapl�k gibi ba�lamayla ger�ekle�tirilir. libAd.a adl� bir dosya bulunursa, ��z�mlenmemi� kaynaklar�n herhangi birinin ��z�mlenmesi durumunda bu dosyadan elde edilecek mod�ller ba�lan�r.


6.- Devinimli Ba�lama ve Payla��ml� Kitapl�klar�n Y�klenmesi

Devinimli (dinamik) ba�lama �al��t�r�labilen kaynak yaz�l�m�n y�klenmesi an�nda /lib/ld-linux.so adl� (ger�ekte, kendisinin de payla��ml� bir kitapl�k oldu�u) �zel bir mod�l taraf�ndan ger�ekle�tirilir.

Daha do�rusu, devinimli kitapl�klar�n ba�lanmas� i�in iki mod�l elde bulunmaktad�r: eski a.out bi�imini kullanan kitapl�klar i�in /lib/ld.so ve yeni ELF bi�imini kullanan kitapl�klar i�in /lib/ld-linux.so.

Bu mod�ller �zel olup her devinimli program ba�lamas�nda y�klenmelidirler. /lib dizininden ba�ka yere aktarmamak ve adlar�n� de�i�tirmemek amac�yla bunlar�n adlar� �l��nl�d�r (standartt�r). E�er /etc/ld-linux.so adl� dosyan�n ad� de�i�tirilecek olursa, ko�ma an�nda ��z�mlenmemi� olan kaynaklar�n ��z�mlenmesi bu yaz�l�m taraf�ndan ger�ekle�tirildi�inden, payla��ml� kitapl�k kullanan programlar kullan�m d��� kal�rlar.

/etc/ld.so.cache adl� dosya taraf�ndan desteklenen son mod�l her bir kitapl�k i�in b�yle bir kitapl��� i�ermeye en uygun �al��t�r�labilen dosyay� g�sterir. Bu konuya daha sonra yine d�nece�iz.


7.- soname. Payla��ml� Kitapl�klar�n S�r�mleri. Uyumluluk.

Art�k payla��ml� kitapl�klarla ili�kili en yan�ltabilici konuya girebiliriz: S�r�mler

S�k s�k 'library libX11.so.3 not found' bi�iminde ilgili kitapl���n bulunamad���n� vurgulayan ve bizi libX11.so.6 varolmas�na ra�men bir�ey yapamaz durumda b�rakan bir iletiyle (mesajla) kar��la��r�z. Nas�l olur da, ld.so(8), libpepe.so.45.0.1 ve libpepe.so.45.22.3 kitapl�klar�n�n yerde�i�tirebilece�ini alg�larken libpepe.so.46.22.3?'nin bunlar yerine kullan�m�na izin vermez.

Linux alt�nda ve ELF bi�imini devreye sokan t�m i�letim sistemlerinde kitapl�klar, birbirlerinden ay�rdedilmek amac�yla bir katarla (simge dizisiyle) kimliklendirilirler: soname.

soname kitapl���n kendisinde i�erilir ve ilgili katar (simge dizisi) kitapl��� olu�turan nesneler ba�lan�rken belirlenir. Bu katara bir de�er vermek i�in, payla��ml� kitapl�k yarat�ld���nda, ld(1)'e bir se�enek (-soname ) vermek gerekir.

Bu katar �al��t�r�labilen dosyay� kimliklendirir ve y�klenmesi gereken payla��ml� kitapl��� kimliklendirmek amac�yla devinimli y�kleyici taraf�ndan kullan�l�r. S�re� a�a��dakine benzer bi�imdedir:
Ld-linux.so program�n bir kitapl��a gereksinimi oldu�unu saptar ve kitapl���n soname de�erini belirler. Ard�ndan /etc/ld.so.cache devreye girer ve bu de�eri i�eren dosyan�n ad�n� bulur. Daha sonraki a�amada, istenen soname ile kitapl�kta bulunan ad kar��la�t�r�l�r ve e�er ayn� olduklar� saptan�rsa i� bitmi� demektir! �zde�lik s�zkonusu de�ilse arama s�reci uygun de�er bulunana dek s�rd�r�l�r ya da yak�nma iletisiyle (mesaj�yla) i�lem durdurulur.

ld-linux.so'un istemde bulunulan soname ile dosyan�n �ak��t���n� denetlemesinden dolay�, soname bir kitapl���n y�kleme i�in uygun d���p d��medi�inin s�nanmas�na olanak sa�lar. Uyumsuzluk durumunda �nl� 'libXXX.so.Y' not found bi�iminde aranan kitapl���n bulunmad��� do�rultusunda ileti (mesaj) yay�nlan�r. Aranan �ey soname olup yap�lan yak�nma soname'e g�nderide bulunur.

Bu durum, bir kitapl���n ad� de�i�tirildi�inde kar��la��lan kavram karga�as�na neden olur ve sorun da ortadan kalkmaz. Fakat soname'e eri�ip de�i�tirmek hi� de iyi bir d���nce de�ildir. ��nk�, Linux toplulu�unda soname'e atama yapmak i�in bir uyla��m bulunmaktad�r:

Uyla��m gere�i, bir kitapl���n soname'i (payla��ml� nesnel ad�) uygun bir kitapl��� ve onun ARAY�Z�N� kimliklendirmelidir. E�er bir kitapl�kta onun yaln�zca i� i�levselli�ini etkileyen t�m aray�z�n etkisiz kald��� (fonksiyonlar�n say�s�, de�i�kenler, fonksiyon parametreleri) de�i�iklikler yap�lacak olursa iki kitapl���n (de�i�iklik �ncesi ve sonras�) yerde�i�tirebilir oldu�u s�ylenir. B�ylece, genellikle, de�i�ikliklerin az�nl�kta oldu�unu s�yleyebiliriz. (�ki kitapl�k da uyu�umlu olup birinin yerine di�eri kullan�labilir.) Bu durumda, soname'de g�z�kmeyen az�nl�k de�eri s�k s�k de�i�tirilebilir ve b�y�k sorunlar ya�anmaks�z�n kitapl�klararas� de�i�im sa�lanabilir.

Bununla beraber, fonksiyon eklemelerinde, fonksiyon kald�r�m�nda, ve genellikle kitapl���n ARAY�Z DE���T�R�M�NDE kitapl���n bir �ncekisiyle yerde�i�tirebilir bi�imde tutulabilmesi m�mk�n de�ildir. (S�zgelimi, libX11.so.3 yerine libX11.so.6'in yerle�tirimi X11R5'ten X11R6'a g�ncellemenin bir par�as� olup yeni fonksiyon tan�mlar�n� g�ndeme getirdi�inden aray�z� de�i�tirir). X11R6-v3.1.2'dan X11R6-v3.1.3'ye ge�i�in aray�zde de�i�iklikler i�ermemesi ve (her ne kadar yenisine, eskisini koruma alt�nda tutabilmek amac�yla, ayr� bir ad verilse de) kitapl���n ayn� soname'e sahip olmas� olas�d�r. Bu nedenle, kitapl�k ad�nda s�r�m numaras� da verilirken soname'de yaln�zca egemen say� yeral�r.


8.- ldconfig(8)

�nceden s�z�n� etti�imiz gibi, /etc/ld.so.cache, tt>ld-linux.so'in kitapl�kta bulunan dosyan�n soname'ini d�n��t�rmesine izin verir. Bu daha �ok etkinlik i�in ikitabanl� (binary) birdosya bi�iminde olup ldconfig(8) g�d�m�yle yarat�l�r.

ldconfig(8), /etc/ld.so.conf taraf�ndan belirtilen dizinlerde bulunan her bir devinimli kitapl�k i�in kitapl���n soname'i taraf�ndan �a�r�lan bir simgesel ba�lant� �retir. Bu eylem ld.so dosya ad�n� elde ederken, ger�ekte yap�lan dizin dizelgesinde (listesinde) aranan soname'e sahip dosyan�n se�ilmesi olacak bi�imde ger�ekle�tirilir. B�ylece, her kitapl�k ekleme s�recinde ldconfig(8)'nin �al��t�r�lmas�na gereksinim kalmaz. ldconfig, yaln�zca dizelgeye (listeye) bir dizin eklenirken ko�ulur.

 

9.- Devinimli Kitapl�k Yapmak �stiyorum.

Devinimli (dinamik) bir kitapl�k olu�turmadan �nce onun ger�ekten yararl� olup olmad���n� d���nmek gerekir. Devinimli kitapl�klar sistemde a�a��daki nedenlerle a��r� y�klemelere neden olurlar:

  • Bir program�n y�klenmesi �e�itli a�amalarda ger�ekle�tirilir. Bunlardan biri anaprogram�n y�klenmesi olup di�erleri de program�n kulland��� her bir devinimli kitapl���n devreye sokulmas�d�r. (Bu son a�aman�n uygun devinimli kitapl�klar i�in, uygun olmama konumundan yarar konumuna ge�ti�ini g�rece�iz).

  • Devinimnli kitapl�klar yeniden bellek d�zenlemeli g�d�mler i�ermelidir. Bunun nedeni s�re� i�in sanal bulunaklar�n (adreslerin) bulundu�u yerlerde y�kleme buluna��n� (adresinin) y�kleme an�na kadar bilinmemesidir. Derleyici, y�kleme an�nda, kitapl���n y�klenme konumunu tutmak i�in bir yazma� al�koymaya zorlan�r. Bu ise, sonu�ta, g�d�mler toplulu�unun eniyilenmesi i�in yazma� say�s�n� bir azalt�r. Bu ise, bu durumda ortaya ��kan a��r� y�klemenin bir�ok durumda kar��la��lan a��r� y�klemeden %5 daha fazla olmas� nedeniyle, k���k bir sagl�ks�zl�kt�r.

Devinimli kitapl���n uygun d��ebilmesi i�in zaman�n b�y�k bir �o�unlu�unda baz� programlar taraf�ndan kullan�l�r olmas� gerekmektedir. (Bu, ba�lat�c� s�recin �l�m�nden sonra kitapl�k metninin yeniden y�klenmesi sorunundan ka��nmaya olanak sa�lar. Di�er s�re�ler kitapl���n mod�llerini kullan�rken kitapl�k da bellekte kal�r).

Payla��ml� kitapl�k, yaln�zca gereken mod�lleriyle de�il, b�t�n�yle belle�e y�klenir. Dolay�s�yla yararl� olabilmesi i�in, b�t�nsel olarak yararl� olmal�d�r. Devinimli kitapl��a en k�t� �rnek yaln�zca bir fonksiyonu kullan�l�p %90'� �ok seyrek kullan�lan bir kitapl�kt�r.

Devinimli kitapl��a bir �rnek olarak C standart kitapl��� verilebilir. (Bu kitapl�k C'de yaz�lan t�m programlar taraf�ndan kullan�l�r;). Ortalamada, fonksiyonlar�n t�m� orada burada yani her yerde kullan�l�rlar.

Dura�an kitapl�klarda kullan�mlar� seyrek olan fonksiyonlar�n i�erilmesi genellikle gereksizdir. Bu fonksiyonlar kitapl���n kendi mod�l�nde yer ald�k�a, bunlar kendilerine gereksinimi olmayan fonksiyonlara ba�lant�l� olmayacaklard�r.


9.1.- Kaynaklar�n Derlenmesi

Kaynaklar�n derlenmesi, s�recin sanal bulunaklar (adresler) uzay�ndaki farkl� konumlara y�klenebilen g�d�mler toplulu�u �retebilmek amac�yla '-f PIC' (Konumdan Ba��ms�z G�d�mler Toplulu�u) se�ene�i kullan�m� d���nda, normal bir kaynak durumundakine benzer bi�imde ger�ekle�tirilir.

Bu a�ama, dura�an olarak ba�lanan bir programda kitapl�k nesnelerinin konumlar� ba�lanma an�nda yani sabit bir anda ��z�mlenir olmas�ndan dolay�, �nemlidir. Eski a.out �al��t�r�labilenlerinde, bu a�aman�n her bir payla��ml� kitapl���n sanal bulunaklar (adresler) uzay�n�n sabit bir konumunda yerle�tirilmesiyle sonu�lanarak ger�ekle�tirilmesi olanaks�zd�. Bunun bir sonucu olarak, bir program�n sanal belle�in �rt��meli b�lgelerinde y�klenmek i�in haz�rlanm�� iki kitapl�k kullanmak istemesi durumunda �at��malar olu�uyordu. Bir dizelgenin (listenin) bak�m� i�in zorlanman�z durumunda, herhangi bir kimsenin bir kitapl��� devinimli yapmak istedi�i bir yerde, ba�ka birilerinin kullanmamas� amac�na y�nelik olarak bulunak (adres) b�lgeleri belirt�m� gerekecekti.

�nceden s�z�n� etti�imiz gibi, resmi bir dizelgeye (listeye) kay�t i�in devinimli kitapl��a gerek yoktur. Bunun nedeni, g�d�mler toplulu�unun bellekteki konumu yeniden d�zenlenebilir olmas� gerekmesine ra�men, kitapl���n, y�klenme an�nda, o anda belirlenen konumlara gitmesidir.


9.2.- Kitapl�ktaki Nesnelerin Ba�lanmas�

Nesnelerin t�m�n�n derlenmesinden sonra onlar�n, devinimli olarak y�klenebilen bir nesne yaratmak i�in, �zel bir se�enekle ba�lanmas� gerekir.

gcc -shared -o libName.so.xxx.yyy.zzz
-Wl,-soname,libName.so.xxx

Okuyucunun takdir edece�i gibi, payla��ml� bir kitapl�k yarat�m�na yola�acak bir dizi se�ene�in devreye sokulmas� d���nda, bu i�lem ola�an bir ba�lama i�lemine benzer. �imdi bunlar� bir bir a��klayal�m:

  • -shared.
    Bu s�zc�k ba�lay�c�ya, sonu�ta, payla��ml� bir kitapl�k �retece�ini, dolay�s�yla ��kt� dosyas�nda kitapl��a kar��l�k gelen bir t�r �al��t�r�labilenin bulunaca��n�, s�yler.

  • -o libName.so.xxx.yyy.zzz.
    sonu� dosyas�n�n ad�d�r. Ad uyla��m�na uymak zorunlu olmamakla birlikte, bu kitapl���n gelecekteki geli�melerin bir �l��n� olmas� istenmiyorsa, uyla��ma uymak daha uygundur.

  • -Wl,-soname,libName.so.xxx.
    -Wl se�ene�i gcc(1)'ye (virg�lle ayr�lm��) izleyen se�ene�in baglay�c� i�in oldu�unu s�yler. Bu gcc(1) taraf�ndan se�eneklerin ld(1)'ye ge�irilmesi i�in kullan�lan d�zenektir. Yukar�da, ba�lay�c�ya a�a��daki se�enekler ge�irilmektedir.

       -soname libName.so.xxx
       
    Bu se�enek kitapl���n soname'ni, kitapl���n yaln�zca soname'i saptanm�� kitapl�k gerektiren programlar taraf�ndan devreye sokulmas�na olanak verebilecek bi�imde saptar.

9.3.- Kitapl�k Kurulumu

Art�k ilgili �al��t�r�labilenin elde oldu�u d���n�lebilir. B�ylece, bunun, kullan�ma olanak verebilecek uygun bir yere yerle�tirilmesi gerekir.

Yeni kitapl���m�za gereksinim duyan bir program� derlemek i�in a�a��daki g�d�m sat�r� kullan�labilir:

gcc -o program libName.so.xxx.yyy.zzz
Kitapl���n uygun bir yere (/usr/lib), kurulmu� olmas� durumunda a�a��daki g�d�m sat�r� yeterlidir:

gcc -o program -lName
(kitapl���n /usr/local/lib'de bulunmas� durumunda '-L/usr/local/lib' se�ene�inin eklenmesi yeterlidir)

Kitapl���n kurulumu i�in a�a��daki i�lemler yap�labilir:

  • Kitapl��� /lib ya da /usr/lib'a kopyalay�n. Onu ayr� bir konuma (s�zgelimi /usr/local/lib), kopyalamaya karar verirseniz ba�lay�c�n�n yani ld(1)'in programlar� ba�larken kitapl��� �zdevimli olarak bulabilece�inden emin olamazs�n�z.

  • libName.so.xxx.yyy.zzz'den libName.so.xxx.'ye simgesel ba�lant� yapmak i�in ldconfig(1)'yi �al��t�r�n. Bu a�ama bize �nceki a�amalar�n do�ru bi�imde ger�ekle�tirildi�ini ve kitapl���n devinimli bir kitapl�k oldu�unu s�yler. Programlar�n ba�lanma bi�imi, kitapl�klar�n ko�ma an�nda y�klenmesi d���nda, bu a�ama taraf�ndan etkilenmez.

  • Ba�lay�c�n�n kitapl��� -l se�ene�i ile bulabilmesine izin vermek i�in libName.so.xxx.yyy.zzz (ya da libName.so.xxx, soname)'den libName.so'a, simgesel bir ba�lant� kurunuz. Bu d�zene�in i�leyebilmesi i�in kitapl���n ad�n�n libName.so

    �r�nt�s�yle �ak��mas� gerekir.

10.- Dura�an bir kitapl�k yap�m�

�te yandan dura�an bir kitapl�k yap�m� istendi�inde (ya da dura�an ba�lant� kopyalar� sunabilmek i�in iki s�r�m gerekecektir) a�a��daki bi�imde ilerlenebilir:

Not: Ba�lay�c�, kitapl�k aray��� s�ras�nda, �nce libName.so, daha sonra da libName.a. dosyalar�n� arar. E�er her iki kitapl�k da (dura�an ve devinimli s�r�mler) ayn� s�zc�kle adland�r�l�rsa bunlardan hangisinin ba�lant�ya girece�inin saptanabilmesi genellikle m�mk�n de�ildir (devinimli olan� �nce bulunacak olursa hemen ba�lant�ya girer).

Bu nedenle, ayn� kitapl���n her iki s�r�m�ne de gereksinim duyulursa, dura�an olan�n�n libName_s.a, devinimli olan�n�n da libName.so olarak adland�r�lmas� sal�k verilir. Bu do�rultuda, ba�lant� yap�l�rken dura�an s�r�m� ba�lamak i�in

gcc -o program -lName_s
devinimli olan� ba�lamak i�in de
gcc -o program -lName
g�d�mleri kullan�lacakt�r.

10.1.- Kaynaklar�n Derlenmesi.
Kaynaklar� derlemek i�in herhangi bir �zel �l��m almayaca��z. Benzer yoldan ba�lama a�amalar�nda nesnelerin konumu kararla�t�r�ld�k�a, (onu kullanarak devam etmek m�mk�nse de) -f PIC ile derlemek gerekli de�ildir.  
10.2.- Kitapl�ktaki Nesnelerin Ba�lanmas�
Dura�an kitapl�klar durumunda ba�lama a�amas� yoktur. T�m nesneler kitapl�k dosyas�nda ar(1) g�d�m�yle belgeliklenmi�lerdir. Daha sonra, simgeleri ivedilikle ��z�mlemek i�in ranlib(1) g�d�m�n�n kitapl�k �zerinde �al��t�r�lmas� sal�k verilir. Gerekli olmamas�na kar��n, bu g�d�m�n �al��t�r�lmamas� �al��t�r�labilendeki mod�llerin ba�lant�lar�n�n kopmas�na yola�abilir. Bunun nedeni, kitapl�k olu�turumu s�resince mod�l ba�lay�c� taraf�ndan i�lenirken mod�ller aras� dolayl� ba�lant�lar�n hepsi de birdenbire ��z�mlenmez: mod�le bir ba�ka mod�l taraf�ndan daha sonra belgelikde (ar�ivde) gereksinim duyulmas� durumunda, t�m g�ndermeler ��z�mleninceye dek ayn� kitapl�k i�inden ge�irilmek zorunda kal�n�r).  
10.3.- Kitapl�k Kurulumu

Yaln�zca bir dura�an kitapl�k kullan�lmas� durumunda dura�an kitapl�klar�n libName.a bi�iminde adland�r�lacakt�r. �ki t�r kitapl�k kullan�m� durumunda dura�an olanlar i�in, dura�an ve devinimli kitapl�k kullan�m�n� kolayca denetleyebilmek amac�yla, libName_s.a ad�n� sal�k verece�im.

Ba�lama s�reci -static se�ene�inin kullan�m�na izin verir. Bu se�enek /lib/ld-linux.so mod�l�n�n y�klenmesini denetler ve kitapl�k inceleme s�ras�n� etkilemez. E�er birileri -static yazar ve ld(1) devinimli bir kitapl�k bulursa onun durgun e�de�erini aramak yerine onunla i�g�rmeyi s�rd�r�r. Bu durum, kitapl�kta bulunan ve �al��t�r�labilene ait olmayan yordamlar�n devreye sokulmas�, �zdevimli devinimli y�kleme mod�l�n�n ba�lanmamas� ve dolay�s�yla bu s�recin ger�ekle�tirilememesi nedeniyle, ko�ma an�nda yan�lg�lara yol a�ar.


11.- Devinimli Ba�lant�ya Kar�� Dura�an Ba�lant�

Bir program i�inde yaln�zca dura�an olarak i�erilmesine izin verilen bir da��t�m i�in yetkilendirildi�imiz bir kitapl��� kullanan bir program�n da��t�m�n� istedi�imizi varsayal�m. (Bu durum i�in Motif ile geli�tirilen uygulamalar �rnek verilebilir).

Bu t�r bir yaz�l�m �retmek i�in iki yol bulunmaktad�r. Birincisi durgun olarak ba�lanm�� bir �al��t�r�labilen �retmektir. Bu durumda yaln�zca .a kitapl�klar� kullan�lacak ve devinimli y�kleyicinin kullan�m�ndan ka��n�lacakt�r. Bu t�r programlar bir kez y�klenirler ve sistemde, /lib/ld-linux.so'yi de kapsamak �zere, herhangi bir kitapl�k y�klenimini gerektirmezler. Bununla beraber ikitabanl� (binary) dosyada gerekli olan yaz�l�mlar�n t�m�n� ta��ma sak�ncas�na sahip olup bu y�zden dev dosyalard�r. �kinci se�enek devinimli ba�lanm�� program �retimidir. Bunun anlam�, uygulamam�z�n ko�aca�� �evrenin ilgili t�m devinimli kitapl�klar� sa�lamas� gereklili�idir. Baz� durumlarda, sa�lanabilen kitapl�klar�n t�m�ne sahip olunamas�yla birlikte �al��t�r�labilen �ok k���kt�r (s�zgelimi Motif'i olmayan bireyler de vard�r).

��indeki kitapl�klar�n bir kesiminin dura�an di�er kesiminin devinimli oldu�u ���nc� bir se�enekten, kar���k bir da��t�mdan da s�zedilebilir. Bu durumda, �at��mal� kitapl�klar� dura�an di�erlerini devinimli se�mek mant�ksal olarak do�ru bir yakla��md�r. Bu se�enek yaz�l�m da��t�m� i�in �ok uygun bir bi�imdir.

S�zgelimi, bir program�n �� ayr� s�r�m� a�a��daki bi�imde derlenebilir:

gcc -static -o program.static 
program.o -lm_s -lXm_s -lXt_s -lX11_s\
-lXmu_s -lXpm_s

gcc -o program.dynamic program.o
-lm -lXm -lXt -lX11 -lXmu -lXpm

gcc -o program.mixed program.o 
-lm -lXm_s -lXt -lX11 -lXmu -lXpm

Son durumda, yaln�zca Motif kitapl��� Motif (-lXm_s) dura�an olarak ba�lan�rken di�erleri devinimli olarak ba�lan�rlar. Program�n ko�tu�u �evre, libm.so.xx libXt.so.xx libX11.so.xx libXmu.so.xx y libXpm.so.xx kitapl�klar�n�n uygun s�r�mlerini sa�lamal�d�r.


Daha �ok bilgi i�in:
  • ELF-NASILYAPILIR'a bak�n�z.


© 1998 Luis Colorado
Bu sanal y�renin bak�m� Miguel A Sepulveda taraf�ndan yap�lmaktad�r..