Les règles exactes suivies par le gcc
compilateur pour trouver les fichiers include sont expliquées à: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
Une astuce en ligne de commande rapide pour savoir d'où vient un fichier include est la suivante: 1
echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed
Ensuite, si vous regardez le unistd.preprocessed
fichier, vous remarquerez des lignes comme:
# 1 "/usr/include/unistd.h" <some numbers>
Ceux-ci vous indiquent que le bloc de lignes suivant (jusqu'à la # number ...
ligne suivante ) provient du fichier /usr/include/unistd.h
.
Donc, si vous voulez connaître la liste complète des fichiers inclus, vous pouvez rechercher les # number
lignes:
echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*
Sur mon système Ubuntu 10.04 / gcc 4.4.3, cela produit:
$ 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 Remarque: Le chemin de recherche des fichiers d'inclusion est modifié par l' -I
option de ligne de commande; vous devez donc ajouter des -I path
arguments à l' gcc
invocation. De plus, si vous compilez une source C ++, vous devez remplacer -x c
par -x c++
.
unistd.h
est un fichier d'en-tête C; qu'est-ce que cela a à voir avec Java?