Точные правила, применяемые gcc
компилятором для поиска включаемых файлов, описаны по адресу: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html.
Быстрый трюк командной строки, чтобы выяснить, откуда берутся включаемые файлы: 1
echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed
Затем, если вы посмотрите на unistd.preprocessed
файл, вы заметите строки вроде:
# 1 "/usr/include/unistd.h" <some numbers>
Они говорят вам, что следующий блок строк (до следующей # number ...
строки) происходит из файла /usr/include/unistd.h
.
Итак, если вы хотите узнать полный список включенных файлов, вы можете использовать grep для # number
строк:
echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*
В моей системе Ubuntu 10.04 / gcc 4.4.3 это выдает:
$ 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 Примечание: путь поиска для включаемых файлов изменяется параметром -I
командной строки; Итак, вы должны добавить любые -I path
аргументы к gcc
вызову. Кроме того, если вы компилируете исходный код C ++, вы должны заменить его -x c
на -x c++
.
unistd.h
это файл заголовка C; какое отношение это имеет к Java?