Knihovny v RH7.3 vs. symlinky

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Čtvrtek Červen 13 16:31:54 CEST 2002


On Thu, 13 Jun 2002, Ing. Pavel PaJaSoft Janousek wrote:

> 	je nejaky zamer v tom, ze knihovny v /usr/lib/ maji vzdy jen
> tento link (balik gd, freetype, libjpeg, libpng, libz, a zrejme i
> dalsi) - napr.:

Je v tom zamer. "libpng.so.2" je jmeno, tzv. soname, ktere je uvedeno
v programu slinkovanem s takovou knihovnou a ktere dynamic linker pouziva,
kdyz prislusnou knihovnu hleda. Konvence je takova, ze cislo za .so
odpovida verzi rozhrani, cili zpetne nekompatibilni zmena rozhrani musi
byt spojena i se zmenou tohoto cisla. To pak umoznuje, ze v systemu
koexistuje vic verzi jedne knihovny a programy si vzdy najdou tu spravnou.

V praxi se navic obvykle vytvareji soubory, kde je za .so vice
strukturovana verze, a na ty se dela symlink (napr. zminene "libpng.so.2
-> libpng.so.2.1.0.12"), ale to je v podstate jen takova konvence
umoznujici napohled rozlisi male variace ve verzich knihoven. Mohlo by to
mit smysl, kdyby nejaka knihovna podporovala vice ruznych rozhrani, ale
nikdy jsem to nevidel pouzit v praxi (i knihovny s verzovanymi symboly
jsem vzdy videl s jednim soname).

Naopak "libpng.so" je jmeno, pod kterym je knihovna hledana pri kompilaci
(minim tim linkovani prave zkompilovaneho kodu). Idea je takova, ze pri
prekladu nezalezi na binarni kompatibilite, ale chci vzdy pouzit urcitou,
obvykle nejnovejsi, verzi. Navic se to nekdy pouziva k tomu, ze se linkeru
davaji specialni instrukce (viz /usr/lib/libc.so), ale vetsinou je to
proste link na prislusny soubor se sdilenou knihovnou (pripadne to
muze byt link na link). To, ze by ten link melo byt potreba delat rucne,
mne celkem prekvapuje, protoze slusny Makefile by ho pri instalaci mel
udelat a slusne udelany -dev/-devel balik by ho mel mit v sobe.

Poznamenejme, ze v posledni dobe se zacaly davat cisla verzi i pred .so,
takze vznikaji jmena jako "libgtk-1.2.so.0.5.1". Tohle je zase motivovano
predevsim snahou umoznit koexistenci ruznych generaci teze knihovny (treba
gtk+ 1.2 a 2.0), ktere nejsou kompatibilni ani na urovni zdrojovy kodu.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux