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.html
Um truque rápido da linha de comando para descobrir de onde vem um arquivo de inclusão é o seguinte: 1
echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed
Então, se você olhar para o unistd.preprocessed
arquivo, notará linhas como:
# 1 "/usr/include/unistd.h" <some numbers>
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:
echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*
No meu sistema Ubuntu 10.04 / gcc 4.4.3, isso produz:
$ 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: 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++
.
unistd.h
é um arquivo de cabeçalho C; o que isso tem a ver com Java?