Ho compilato la libreria standard di gnu e l'ho installata in $GLIBC_INST
.Perché stddef.h non è in/usr/include?
Ora, provo a compilare un molto semplice programma (utilizzando una sola #include: #include <stdio.h>
):
gcc --nostdinc -I$GLIBC_INST/include foo.c
La compilazione (? Preprocessore) mi dice che non trova stddef.h
.
E in effetti, non c'è nessuno in $GLIBC_INST/include
(né ce n'è uno in /usr/include
). Tuttavia, ho trovato uno stddef.h
in /usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include
.
Perché questo file non è sotto /usr/include
? Ho pensato che appartenesse alla libreria c standard e dovrebbe essere installato in $GLIBC_INST/include
.
Come posso compilare il mio foo.c
con la libreria standard appena installata quando non sembra venire con un stddef.h
?
Edit: Chiarimento
credo che il titolo di questa interrogazione non è ottimale. Come è stato sottolineato da alcune risposte, non vi è alcun obbligo per stddef.h
di essere in /usr/include
(o $GLIBC_INST/include
, per quella materia). Lo capisco.
Ma mi chiedo come posso procedere quando voglio usare $GLIBC_INST
. Mi sembra ovvio (anche se potrei sbagliarmi qui) che ho bisogno di invocare gcc con --nostdinc
per non utilizzare i file di intestazione installati dal sistema. Ciò comporta che io uso -I$GLIB_INST/include
. Questo è chiaro per me.
Tuttavia, ciò che rimane poco chiaro per me è: quando aggiungo anche -I/usr/lib/gcc/x86..../include
, come posso essere sicuro di avere effettivamente i file di intestazione più recenti per gli glibc appena compilati?
Potresti confermare che 'gcc' punta effettivamente alla tua installazione 5.3.0, ad esempio, con' quale gcc'? –
Se si aggiunge l'opzione '-I', il compilatore guarda prima al percorso di inclusione aggiunto prima di esaminare le directory standard. Usando '--nostdinc' sei sicuro che stai usando le intestazioni appena installate. – LPs
Inoltre, vedere http://stackoverflow.com/questions/31285258/why-usr-include-linux-stddef-h-is-empty –