Aha, tak je to Re: Elfovske sdilene knihovny a kompilace s -fPIC

Frantisek Dufka DUFKAF na infnw.inf.upol.cz
Středa Září 3 12:04:16 CEST 1997


> On Mon, 1 Sep 1997, Pavel JANIK ml. wrote:
>
> > > 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.
> > .. snipped ...
> > > Funkce v knihovne se zavola dobre, odkazy v te funkci na globalni data
> > > v te knihovne fungujou taky. Proc potom ty slozitosti ?
> >
> > -fPIC vytvari position independent code, ktery se potom pouzije k vytvoreni
> > dynamicky linkovatelne knihovny. Ty "slozitosti" tam jsou proto, ze knihovny
> > jsou i shared (sdilene). Nebo jste myslel neco jineho ?
>
Myslim, ze z meho mejlu (i z toho kousku co byl vyriznut) je zrejme, ze
vim o existenci sdilenych knihoven, ze jsem si jednu zkusebne napsal a
uspesne vyzkousel, takze jsem opravdu myslel jeste neco jineho - Proc
vysledna sdilena knihovna funguje, i kdyz neni kompilovana s -fPIC !

> no prave; ale dovolim si to trochu rozvest:
>
> je dost dobre mozne (a ja tomu celkem verim), ze dynamic linker zvladne
> spravit odkazy v non-PIC kodu (zajimave by asi bylo srovnat velikost
> relokacnich sekci obou vyslednych binarek), ale tim, ze jsou mista, ktera
> musi upravit, roztrousena po celem kodu, se celkem uspesne dosahne toho, ze
> se vysledne jedna o "nesdilenou knihovnu" (poznamka na okraj: takhle
> funguje loadovani exe/dll ve Win32, aspon pokud se neprovede nejaka cerna
> magie s preferovanymi adresami :/)
>
> naproti tomu PIC dela ruzne kejkle, aby se odkazy na globalni symboly
> shromazdily na jedno misto, takze stranek, ktere linker upravi je
> relativne malo a vysledkem je znacna uspora pameti a (coz muze--ale
> nemusi--vyvazit vetsi spotrebu cpu)
>
Aha to je ono, nejak me nenapadlo, ze ten linker musi kod te knihovny
v pameti relokovat, cimz vznikne pro kazdy proces nova kopie v nejhorsim
pripade cele knihovny, takze je to vlastne na #$%.
Leda ze by se kazda knihovna vzdycky mapovala na stejne absolutni adresy,
cimz by odpadly relokace, coz je ale asi praxi hodne nestastne reseni. Takhle
to bylo v a.out formatu, ze ?

Dekuju za vysvetleni. Tedy linkovat radeji s -fPIC.
A ty (to uz nesouvisi s linuxem, takze pardon) dll-ka ve Win32 teda nejsou
pozicne nezavisly kod, nebo jsou ?

Frantisek Dufka


Další informace o konferenci Linux