[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