Eu tenho vários unistd.h
arquivos no meu Ubuntu Linux. Eu tenho um /usr/include/asm/unistd.h
. Este arquivo tem estas diretivas:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
Nessa pasta, posso encontrar esses arquivos ( unistd_32.h
e unistd_64.h
).
Mas /usr/src/linux-headers-2.6.31-22/include/asm-generic/
há outro unistd.h
que começa com essas diretrizes:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Portanto, a pergunta é: como posso saber qual deles está carregado? Existe alguma maneira de verificá-lo em tempo de execução com Java?
unistd.h
é um arquivo de cabeçalho C; o que isso tem a ver com Java?Respostas:
As regras exatas seguidas pelo
gcc
compilador para localizar arquivos de inclusão são explicadas em: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.htmlUm truque rápido da linha de comando para descobrir de onde vem um arquivo de inclusão é o seguinte: 1
Então, se você olhar para o
unistd.preprocessed
arquivo, notará linhas como:Eles informam que o seguinte bloco de linhas (até a próxima
# number ...
linha) vem do arquivo/usr/include/unistd.h
.Portanto, se você quiser conhecer a lista completa de arquivos incluídos, poderá fazer o grep para as
# number
linhas:No meu sistema Ubuntu 10.04 / gcc 4.4.3, isso produz:
1 Nota: O caminho de pesquisa para incluir arquivos é modificado pela
-I
opção de linha de comando; portanto, você deve adicionar-I path
argumentos àgcc
invocação. Além disso, se você estiver compilando uma fonte C ++, substitua-x c
por-x c++
.fonte