Tengo varios 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 /usr/src/linux-headers-2.6.31-22/include/asm-generic/
hay otra 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?
unistd.h
es un archivo de encabezado C; ¿Qué tiene que ver con Java?Respuestas:
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.htmlUn truco rápido en la línea de comandos para averiguar de dónde proviene un archivo de inclusión es el siguiente: 1
Luego, si mira el
unistd.preprocessed
archivo, notará líneas como: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:En mi sistema Ubuntu 10.04 / gcc 4.4.3, esto produce:
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 lagcc
invocación. Además, si está compilando una fuente C ++, debe sustituirla-x c
por-x c++
.fuente