[FoLUG]domanda sulle librerie C
Stefano Giunchi
folug@lists.linux.it
Mon, 17 Feb 2003 10:57:28 +0100
>
>
>ciao stefano! ho visto dai post precedenti che stai bene :) !
>
>
Beh! Sono stato meglio, ma sono in recupero! :-)
>>Un problema di Linux è che ogni volta che c'è un passaggio di versione
>>delle librerie standard glibc, certi programmi smettono di funzionare
>>se non ricompilati con le nuove versioni.
>>
>>
>
>chiaro. cambiano gli entry point delle funzioni ivi contenute, come
>minimo
>
(Scusa se continuo a fare un confronto con il mondo MS, d'altronde
ognuno proviene dalle proprie esperienze)
Ma se il collegamento (entry point) alla libreria esterna è dinamico
(così avviene con le DLL di Windows, e così penso sia anche con le
librerie Linux), il passaggio a nuove versioni di libreria non dovrebbe
comportare un malfunzionamento dei programmi che vi si linkano.Non è che
chi sviluppa librerie (glibc inclusa), in genere, è poco accorto nel
mantenere la compatibilità all'indietro, causando i Segfault nei
programmi che linkavano a versioni + vecchie?
D'altronde, quando MS rilascia nuove versioni delle librerie, è
veramente un caso _molto_ difficile che i programmi che linkavano a
versioni vecchie non funzionino più (cmq, loro hanno dei team di testing
della Madonna per ogni cosa che fanno... )
>>standard (quella definita nel libro "linguaggio C") la cosa migliore
>>era linkarla all'interno dell'eseguibile, vista la sua esigua
>>dimensione, rendendolo molto più indipendente dalle varie versioni di
>>libreria installate nel sistema.
>>
>>
>
>vero. una volta.... calcola ora la somma delle dimensioni di tutte le
>lib e di tutti i programmi sparsi. guarda qui
>ivan@runner:~$ ldd /bin/ls
> librt.so.1 => /lib/librt.so.1 (0x0ffcf000)
> libc.so.6 => /lib/libc.so.6 (0x0fe74000)
> libpthread.so.0 => /lib/libpthread.so.0 (0x0fe3e000)
> /lib/ld.so.1 => /lib/ld.so.1 (0x30000000)
>un prog da cz come ls necessita di 4 lib. se tutte le lib comuni
>dovessero essere incorporate nei prog, la dim totale del sistema come
>minimo decuplicherebbe ( calcolato a naso alle 22:17 di dom sera :)
>
Si, ma (parlo sempre per lontani ricordi, quando avevo provato a
studiare il C) nella fase di link statico non dovrebbero essere prese
dalla libreria solo le parti "utilizzate"? Ero convinto fosse così, in
pratica che solo le funzioni richiamate e quelle da loro richiamate
(...e le altre da quelle richiamate... ad albero) venissero compilate
nell'eseguibile... evidentemente sbagliavo...
>>Ora, perché invece in Linux è pratica comune fare link a librerie
>>esterne, invece che integrarle nell'eseguibile? E' forse che le
>>librerie standard siano diventate così enormi (ma perchè?) da non
>>poter essere più una soluzione valida il link statico?
>>
>>
>
>si anche, ma si sono piu' che altro frammentate. una volta compilai wget
>statico, divento' circa 2.5M.
>ivan@runner:~$ ll /usr/bin/wget
>-rwxr-xr-x 1 root root 187616 Dec 11 12:56 /usr/bin/wget
>cmq la libc attuale e' di circa 1.2M
>
>
La libc attuale è 1.2M, ma è divisa in <stdio>, e negli altri "moduli"
separati, non verrebbe inclusa TUTTA nell'eseguibile!
>riguardati e ricompilati ;-)
>
>
Grazie, mi riguarderò: a ricompilarmi c'ha già pensato il chirurgo! :-D
Stefano
>
>
>