Ich habe mehrere unistd.h
Dateien in meinem Ubuntu Linux. Ich habe eins an /usr/include/asm/unistd.h
. Diese Datei hat folgende Anweisungen:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
In diesem Ordner kann ich diese Dateien ( unistd_32.h
und unistd_64.h
) finden.
Aber es /usr/src/linux-headers-2.6.31-22/include/asm-generic/
gibt noch eine andere unistd.h
, die mit diesen Anweisungen beginnt:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Die Frage ist also: Wie kann ich wissen, welche geladen ist? Gibt es eine Möglichkeit, dies zur Laufzeit mit Java zu überprüfen?
unistd.h
ist eine C-Header-Datei; Was hat das mit Java zu tun?Antworten:
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.htmlEin schneller Befehlszeilentrick, um herauszufinden, woher eine Include-Datei stammt, ist folgender: 1
Wenn Sie sich die
unistd.preprocessed
Datei ansehen , werden Sie folgende Zeilen bemerken: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 :Auf meinem Ubuntu 10.04 / gcc 4.4.3-System ergibt dies:
1 Hinweis: Der Suchpfad für Include-Dateien wird durch die
-I
Befehlszeilenoption geändert . Daher sollten Sie-I path
demgcc
Aufruf alle Argumente hinzufügen . Auch, wenn Sie eine C ++ Quelle kompilieren, sollten Sie ersetzen-x c
mit-x c++
.quelle