[ LUGOS ] vprasanje glede knjiznic

Metod Kozelj metod.kozelj at rzs-hm.si
Fri Dec 1 05:53:27 CET 2000


Howdy!

On Thu, 30 Nov 2000, Stojan Rancic wrote:

> Med kompajlanjem mysql-a (ampak to je v bistvu irelevantno) sem opazil
> naslednje: zadeva hoce na primer uporabljat libreadline , zato ima pri
> prevajanju switch -lreadline .. jaz imam v /lib naslednje :

Pri uporabi knjiznic sta dva scenarija:

1. link-time
2. run-time

1. Ko linker (ld) pride do '-lreadline', potem poizkusa najti bodisi
libreadline.a ali libreadline.so. Isce v nekaterih direktorijih, ki jih
dolocis pri prevajanju linkerja, dodatne direktorije pa mu nakazes z
'L/pot/do/knjiznice'.

2. Ko se program zacne zaganjati (to stori crt0 se mi zdi), potem run-time
loader (ld.so) pogleda v exec datoteko in vidi, da mora naloziti knjiznico
libreadline. Poti, kjer jo isce, so zapisane v ld.so.conf (oziroma
ld.so.cache), dodatno pa mu jih dolocis znastavitvijo env spremenljivke
LD_LIBRARY_PATH.

Imas pa se povezavo med ld in ld.so: ko delas .so knjiznico, mu lahko
dolocis interno ime (-soname). Recimo, knjiznica libreadline.so.4.1 ima
v tvojem primeru -soname libreadline.so.4.1. To ime je tisto, ki ga linker
ld zapise v exec. In to knjiznico ld.so isce po disku ob zaganjanju. Zato
imas lahko instaliranih vec verzij iste knjiznice.

> Torej.. zakaj mi linker avtomaticno ne spozna , da jaz v bistvu imam
> libreadline.so (ker ce mu dam link libreadline.so ->libreadline.so.4.1,
> potem seveda dela) , ampak le razlicno verzijo.. afaik bi to moralo
> delati, ali se motim ?

Kot sem razlozil: isce datoteko libreadline.so. Ce hoces, da ti najde
libreadline.so.4.1, potem moras namesto -lreadline podati opcijo
/lib/libreadline.so.4.1

Peace!
  Mkx

---- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'







More information about the lugos-list mailing list