[linux] lib .so programovanie

Stefan Ondrejicka ondrej na idata.sk
Čtvrtek Červenec 22 18:56:30 CEST 1999


On Wed, 21 Jul 1999, Bohdan Spes wrote:

Ahoj ,

>     Je niekde na sieti nieco o pisani sockovych libiek, treba tam
> dodrziavat nejaku specialnu syntax ? Moze mi niekto napisat ako je riesena
> pluggin architektura v Linuxe ? Vo win je to celkom pekne urobene cez DLL.

Dost podobne ako vo windows. V Linuxe a vacsine aktualnych klovov UNIX-u
je mozne pozivat zdielane objekty tzv. Shared Object (odtial pripona .so)
To su napriklad vsetky tie lib*.so. V linuxe 1.2.X a starsich boli tzv.
a.out DLL zdielane kniznice. To boli kniznice kde kazda verejna funkcia
alebo premenna mala pevnu adresu a kazda zdielana kniznica musela mat
vyhradeny adresny priestor. Bolo dost pracne vyrobit taketo kniznice
(niekedy som s jednou kniznicou zabyl aj par hodin).
Od verzie 1.3.neviemkolko uz je iny (ELF) format zdielanych kniznic.
Tieto kniznice obsahuju tzv. Placing Independent Code (PIC), tj pozicne
nezavisly kod, ktory je mozne umiestnit na lubovolne miesto v pamati.
Tieto sa robia velmi jednoducho:

kompilacia do .o:

gcc -fPIC -DPIC -g -Wall -c file.c
     ^^^^
linkovanie kniznice :

gcc -shared -o libxxxxx.so -W,-soname,libxxxx.so.1.2.3 file1.o file2.o ...

vznikne kniznica libxxxxx.so, ktoru mozeme linkovat k programu, alebo inac
pouzit. Inac pouzit sa da napriklad pomocou kniznice libdl, ktora
poskytuje rozhranie na dynamicky loader. Obsahuje funkcie dlopen a dlsym,
pomocou ktorych je mozne volat funkcie. Funkcia dlopen otvri specifikovanu
kniznicu a funkcia dlsym vrati adresu na ktorej sa nachadza symbol
specifikovany svojim menom. .... A toto je to prave orechove na pisanie
pluginov a rozhrania.

Viac informacii je v manualovej stranke pre dlopen a v ELF-HOWTO

S pozdravom,
Stevo.

---
Stefan Ondrejicka <ondrej na idata.sk>
Beethovenova 11, 917 08 Trnava, Slovakia
http://www.idata.sk/~ondrej/




Další informace o konferenci linux