[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

>
>  
>