Las reglas exactas seguidas por el gcc
compilador para encontrar archivos de inclusión se explican en: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
Un truco rápido en la línea de comandos para averiguar de dónde proviene un archivo de inclusión es el siguiente: 1
echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed
Luego, si mira el unistd.preprocessed
archivo, notará líneas como:
# 1 "/usr/include/unistd.h" <some numbers>
Estos le indican que el siguiente bloque de líneas (hasta la siguiente # number ...
línea) proviene del archivo /usr/include/unistd.h
.
Entonces, si desea conocer la lista completa de archivos incluidos, puede buscar las # number
líneas:
echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*
En mi sistema Ubuntu 10.04 / gcc 4.4.3, esto 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: La ruta de búsqueda para incluir archivos se modifica mediante la -I
opción de línea de comandos; por lo tanto, debe agregar cualquier -I path
argumento a la gcc
invocación. Además, si está compilando una fuente C ++, debe sustituirla -x c
por -x c++
.
unistd.h
es un archivo de encabezado C; ¿Qué tiene que ver con Java?