Elfovske sdilene knihovny a kompilace s -fPIC

Frantisek Dufka DUFKAF na infnw.inf.upol.cz
Pondělí Září 1 15:04:13 CEST 1997


Dobry den,

mam jede takovy vsetecny dotaz. Zkousel jsem si vytvorit malickou sdilenou
knihovnu. Vsechno mi v pohode funguje, jak explicitni linkovani v
programu pomoci dload,dsym,dclose tak dynamicke linkovani primo pri kompilaci.

Vsude ve FAQ a HOWTO jsem cetl, ze dynamicke knihovny se vytvareji tak, ze
se zdrojaky kompiluji s priznakem -fPIC coz produkuje pozicne nezavisly kod,
nebo tak neco a taky se rika, ze je to o neco pomalejsi. Dival jsem se
na vysledny kod v assembleru co to produkuje a ten je dost strasny, vicemene
pri kazdem pristupu na globalni data je misto jedine instrukce treba :
     mov eax,promenna
neco jako
    call L3
L3  pop ebx
cimz se ziska hodnota PC a pak se desne sachuje s ofsetama do tabulky
odkazu na tu promennou. Ne ze by mi na tom nejak zvlast zalezelo, pentium je
rychle, ale mate me, ze kdyz to linkuju normalne, tak to funguje taky.
Funkce v knihovne se zavola dobre, odkazy v te funkci na globalni data
v te knihovne fungujou taky. Proc potom ty slozitosti ?
Chvili jsem nad tim premyslel a neprisel jsem na to proc by mely byt nejake
problemy s relokaci odkazu na data pri dynamickem linkovani. Mozna jsem ale
premyslel malo. Nebo to bylo dulezite jenom pro a.out DLLka a v ELFu uz to
nevadi ? Jak je to ?

Frantisek Dufka


Další informace o konferenci Linux