Yo tengo varias unistd.h
archivos en mi Ubuntu Linux. Tengo uno en /usr/include/asm/unistd.h
. Este archivo tiene estas directivas:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
En esa carpeta, puedo encontrar esos archivos (unistd_32.h
y unistd_64.h
).
Pero en /usr/src/linux-headers-2.6.31-22/include/asm-generic/
hay otro unistd.h
que comienza con estas directivas:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Entonces, la pregunta es: ¿Cómo puedo saber cuál está cargado? ¿Hay alguna forma de verificarlo en tiempo de ejecución con Java?
Las reglas exactas que sigue el compilador gcc
para encontrar archivos de inclusión se explican en: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
Un truco rápido de 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
Entonces, si miras el unistd.preprocessed
archivo, verá líneas como:
# 1 "/usr/include/unistd.h" <some numbers>
Estos te dicen que el siguiente bloque de líneas (hasta el próximo # number ...
línea) proceden del archivo /usr/include/unistd.h
.
Por lo tanto, si desea conocer la lista completa de archivos incluidos, puede grep para # 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 los archivos de inclusión es modificada por -I
opción de línea de comandos; por lo tanto, debe agregar cualquier -I path
argumentos a la invocación gcc
. Además, si está compilando una fuente C++, debe sustituir -x c
con -x c++
.