Le regole esatte seguite dal gcc
compilatore per la ricerca dei file include sono spiegate su: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
Un rapido trucco da riga di comando per scoprire da dove proviene un file include è il seguente: 1
echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed
Quindi, se guardi il unistd.preprocessed
file, noterai linee come:
# 1 "/usr/include/unistd.h" <some numbers>
Questi indicano che il seguente blocco di linee (fino alla # number ...
riga successiva ) proviene dal file /usr/include/unistd.h
.
Quindi, se vuoi conoscere l'elenco completo dei file inclusi, puoi grep per le # number
righe:
echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*
Sul mio sistema Ubuntu 10.04 / gcc 4.4.3, questo produce:
$ echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u
"<built-in>"
"<command-line>"
"<stdin>"
"/usr/include/bits/confname.h"
"/usr/include/bits/posix_opt.h"
"/usr/include/bits/predefs.h"
"/usr/include/bits/types.h"
"/usr/include/bits/typesizes.h"
"/usr/include/bits/wordsize.h"
"/usr/include/features.h"
"/usr/include/getopt.h"
"/usr/include/gnu/stubs-64.h"
"/usr/include/gnu/stubs.h"
"/usr/include/sys/cdefs.h"
"/usr/include/unistd.h"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/stddef.h"
1 Nota: il percorso di ricerca per i file include è modificato -I
dall'opzione della riga di comando; quindi, è necessario aggiungere eventuali -I path
argomenti gcc
all'invocazione. Inoltre, se stai compilando un sorgente C ++, devi sostituirlo -x c
con -x c++
.
unistd.h
è un file di intestazione C; cosa c'entra con Java?