[FoLUG]gcc e kernel-headers

Massimo Piccioni folug@lists.linux.it
Thu, 18 Jul 2002 15:59:14 +0200


>
>
>Mi intrometto nella discussione, perché mi è sorta una domanda: il C è
>nato come linguaggio che garantisse, dietro ricompilazione, la
>compatibilità con diversi sistemi operativi. Ma, se come dici tu, anche
>per fare la minima boiata servono i kernel headers, la compatibilità va
>a farsi benedire. Non dovrebbero bastare le librerie standard del gcc?
>

ciao,
il paradigma di inclusione degli header del C e' strutturato a due 
livelli, proprio per garantire questa "portabilita'".

gli header di primo livello (li trovi sotto /usr/include, quelli che 
includi tu nei tuoi sorgenti) sono indipendenti dalla piattaforma e sono 
praticamente gli stessi su tutti i sistemi.
questi pero', includono a loro volta gli header di secondo livello 
(/usr/include/sys), quelli che dipendono dal particolare HW su cui lavori.
spesso esiste un terzo livello (ad esempio in linux) che dipende dal SO, 
per cui c'e' un'ulteriore innestamento (/usr/include/linux).
se dai un occhio sotto /usr/include non dovresti metterci molto a vederlo.

se poi dai una occhiata ai sorgenti del kernel, ad esempio, puoi notare 
un meccanismo simile sotto la directory include, dove, oltre ai "normali 
header" indipendenti dall'HW, trovi anche un link asm che punta a 
asm-PLATFORM (i386, sparc, mips, ecc, a seconda dell'architettura su cui 
compili) che contiene gli header dipendenti dall'HW, inclusi dai 
precedenti attraverso il link asm.

questo meccanismo ti garantisce che un sorgente scritto per una 
piattaforma sia tranquillamente ricompilabile sotto un'altra 
piattaforma, senza dover mettere mano al codice.
in questo senso si parla di portabilita' del C.
fermo resta che se cambi architettura, quanto meno devi ricompilare.

capisco che puo' non essere molto chiaro
ciao

Massimo