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.
|