Mam kilka unistd.h
plików w moim systemie Ubuntu Linux. Mam jeden na /usr/include/asm/unistd.h
. Ten plik ma następujące dyrektywy:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
W tym folderze mogę znaleźć te pliki ( unistd_32.h
i unistd_64.h
).
Ale /usr/src/linux-headers-2.6.31-22/include/asm-generic/
jest jeszcze jedna, unistd.h
która zaczyna się od tych dyrektyw:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Pytanie brzmi: skąd mam wiedzieć, który jest załadowany? Czy jest jakiś sposób, aby to sprawdzić w środowisku wykonawczym w Javie?
unistd.h
to plik nagłówka C; co to ma wspólnego z Javą?Odpowiedzi:
Dokładne zasady stosowane przez
gcc
kompilator do znajdowania plików dołączanych są wyjaśnione na stronie : http://gcc.gnu.org/onlinedocs/cpp/Search-Path.htmlSzybka sztuczka z wiersza poleceń, aby dowiedzieć się, skąd pochodzi plik dołączenia, jest następująca: 1
Następnie, jeśli spojrzysz na
unistd.preprocessed
plik, zauważysz linie takie jak:Informują one, że następujący blok linii (do następnego
# number ...
wiersza) pochodzi z pliku/usr/include/unistd.h
.Więc jeśli chcesz poznać pełną listę dołączonych plików, możesz grep dla
# number
linii:W moim systemie Ubuntu 10.04 / gcc 4.4.3 powoduje to:
1 Uwaga: Ścieżka wyszukiwania plików dołączanych jest modyfikowana przez
-I
opcję wiersza poleceń; dlatego powinieneś dodać wszelkie-I path
argumenty dogcc
wywołania. Ponadto, jeśli są kompilacji C ++ źródła, należy zastąpić-x c
z-x c++
.źródło