[FoLUG]domanda sulle librerie C

Ivan folug@lists.linux.it
Sun, 16 Feb 2003 22:34:23 +0100


On Sun, 16 Feb 2003 10:50:32 +0100
Stefano Giunchi <stefano.giunchi@libero.it> wrote:

ciao stefano! ho visto dai post precedenti che stai bene :) ! 

> 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 

> Ora mi chiedo: in DOS, e poi Windows, con i compilatori di qualsiasi 
> marca (MS, Watcom, Borland) le librerie venivano linkate all'interno 

link statico

> dell'eseguibile, soprattutto nei programmi ad interfaccia a caratteri
> o TSR (che volevano essere 'circa' i daemons di Unix).

adesso e' "bad practice". 

> Successivamente, è venuta la possibilità di interfacciarsi alle DLL 
> (librerie a caricamento dinamico, che da quello che capisco è lo
> stesso metodo che viene utilizzato per le glibc), ma per la libreria

e per tutte le librerie, anche le piu' ignote. avete notato che i prog
tendono sempre piu' a dividersi in prog.deb, libprog.deb, ecc.. ? vale
anche per rpm avviamente

> 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 :)

> 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

riguardati e ricompilati ;-)


-- 
   (@_  Ivan Fabris, S. Sofia (FC)  PowerPC & Linux Debian Sarge  _*)
   //\      www.darthxiong.net   setiathome.ssl.berkeley.edu      /\\
   V_/_     www.folug.linux.it   pgp key @ www.keyserver.net     _\_V
        Socio Fondatore e Consigliere del Forli Linux User Group