Jak nahrát .so knihovnu a jak vlastně funguje?

Milan Keršláger milan.kerslager na pslib.cz
Pátek Duben 29 13:17:19 CEST 2005


On Fri, Apr 29, 2005 at 12:42:32PM +0200, n_petr na seznam.cz wrote:
> Můžete mi prosím vysvětlit, jak manuálně nahrát .so soubor a jak vlastně 
> .so soubory fungují a k čemu jsou? Díval jsem se na google a moc moudrý 
> z toho nejsem.
> - .so a .a jsou něco jako knihovny nebo moduly či ovladače?

.so je Shared Object, cili sdilena knihovna
.a je staticky linkovatelna knihovna

Pri prekladu (resp. az pri linkovani) programu se staticke knihovny musi
pripojit k vysledne binarce. POkud pouzijete dynamicke knihovny, je ve
vysledne binarce jen odkaz (binarka je mensi a ruzne programy mohou
sdilet jednu knihovnu umistenou v pameti). Nicmene pak musite mit v
systemu pri spusteni k dispozici vsechny potrebne dynamicke knihovny.

Kdyz se program spousti, zavadec zavede binarku a vsechny potrebne
dynamicke knihovny. Zavadec musi take pri startu vyresit reference
(odkazy na funkce z programu do knihovnu prevede ze symbolu na adresy) a
urcit umisteni v pameti (na jakou adresu + relokace).

.ko je neco jako .o (Object code), tj. polotovar, ktery vyleze z
kompilatoru. Linker pak spoji vsechny .o do vysledneho binarniho
programu. .ko je polotovar pro jadro (cili kus kodu, ktery se umisti do
pameti v pripade potreby - treba ovladac - a rozsiri se tim schopnosti
jadra).

Nektere programy (napr. PHP, Apache) pouzivaji mechanismus, kdy behem
sveho behu umeji nahrat do pameti dalsi rozsirujici kod (treba podpora
databazi). Tento kod je taky ve forme .o

Dynamicky zaveditelne objekty (za behu programu nebo jadra) maji silnou
vazbu, takze je nelze libovolne kombinovat mezi ruznymi verzemi (nebo
i mezi ruznymi pouzitymi kompilatory).

ldconfig vytvari databazi dynamickych knihoven, ktere jsou umisteny v
zakladnich adresarich (/lib, /usr/lib) a dalsich, ktere jsou uvedeny v
/etc/ld.so.conf. Seznam je umisten do /etc/ld.so.cache a lze ho vypsat
pomoci ldconfig -p.

ldd /cesta/k_programu umi vypsat, jake sdilene knihovny program
potrebuje a take kde se v systemu nachazeji.

Knihovny obsahuji cislo verze. To se sklada obvykle ze tri cisel -
posledni je patchlevel (poradi opravy, zachovava binarni rozhrani).
Prvni a druhe znaci velke a male cislo verze. Krome toho obsahuje
knihovna jeste interni cislo rozhrani.

-- 
                        Milan Kerslager
                        E-mail: milan.kerslager na pslib.cz
                        WWW:    http://www.pslib.cz/ke/


Další informace o konferenci Linux