Die genauen Regeln, die der gcc
Compiler zum Auffinden von Include-Dateien befolgt , werden unter folgender Adresse erläutert: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
Ein schneller Befehlszeilentrick, um herauszufinden, woher eine Include-Datei stammt, ist folgender: 1
echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed
Wenn Sie sich die unistd.preprocessed
Datei ansehen , werden Sie folgende Zeilen bemerken:
# 1 "/usr/include/unistd.h" <some numbers>
Diese sagen Ihnen, dass der folgende Zeilenblock (bis zur nächsten # number ...
Zeile) aus der Datei stammt /usr/include/unistd.h
.
Wenn Sie also die vollständige Liste der enthaltenen Dateien wissen möchten, können Sie nach den # number
Zeilen suchen :
echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*
Auf meinem Ubuntu 10.04 / gcc 4.4.3-System ergibt dies:
$ 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 Hinweis: Der Suchpfad für Include-Dateien wird durch die -I
Befehlszeilenoption geändert . Daher sollten Sie -I path
dem gcc
Aufruf alle Argumente hinzufügen . Auch, wenn Sie eine C ++ Quelle kompilieren, sollten Sie ersetzen -x c
mit -x c++
.
unistd.h
ist eine C-Header-Datei; Was hat das mit Java zu tun?