[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Linkare staticamente un eseguibile



On Thu, 31 Jul 2003 16:50:13 +0200, Nick Name wrote:

> Ciao a tutti. Mi chiedo se
> 
> - è possibile linkare staticamente solo alcune librerie (per esempio
> tutte tranne le opengl) ?
> 
Si.

> - è possibile prendere un eseguibile linkato dinamicamente e trasformarlo
> in uno linkato staticamente?
>
Mah, in generale credo di no. Per generare un eseguibile, un linker (tipo
ld) ha bisogno di informazioni contenute nei 'relocatable object files'
('.o') che di solito un
eseguibile non contene piu' (eccetto forse se compilato con le opzioni
di debugging). Almeno credo.
 
> - ma quale cacchio è la differenza tra i .so e i .a? Si possono
> trasformare gli uni negli altri?
> 
i .a sono librerie statiche. Quando sono linkate ad un programma vengono
copiate fisicamente ad esso (non tutta la libreria, ma i .o usati
effettivamente dal programma).

i .so sono librerie dinamiche. Quando sono linkate ad un programma non
vengono integrate ad esso ma si fa affidamento sul fatto che su qualunque
macchina giri ci sia una versione della libreria usata (o una compatibile)
e la libreria viene caricata solo al momento del lancio.
Le librerie dinamiche sono comode perche' permetttono a piu' programmi di
condividere lo stesso codice senza sprecare disco o RAM con piu' copie
degli stessi moduli. Inoltre permettono di sostituire una libreria con un
altra migliorata senza dovere rilinkare niente. Pero' i .o sono anche piu'
lenti. E, in un certo senso, 'creano' il problema delle dipendenze tra
pacchetti software.

Sia i .a che i .so sono colezioni di .o con informazioni aggiuntive.
E' quindi possibile convertire un tipo nell'altro. Non conosco modi
per farlo in un colpo solo, ma si possono ad esempio estrarre i .o
da un .a con 'ar' e poi usare 'ld' per generare il '.so'.

> Grazie per la cortese attenzione... cordiali saluti :)
> 
> Vincenzo

Ciao
-----
FB



Reply to: