[FoLUG]gcc e kernel-headers

Stefano Giunchi folug@lists.linux.it
Thu, 18 Jul 2002 16:10:53 +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
>

Grazie, sei stato invece chiarissimo.
In pratica io programmatore linko i miei sorgenti agli header
"generici", e questi, in base al SO in esecuzione, rigirano certe
chiamate agli header specifici del SO in questione. Così nei miei
sorgenti non devo cambiare niente, mi basta ricompilarli.
Giusto?

Stefano