У меня есть несколько unistd.h
файлов в моем Ubuntu Linux. У меня есть один на /usr/include/asm/unistd.h
. Этот файл имеет следующие директивы:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
В этой папке я могу найти эти файлы ( unistd_32.h
и unistd_64.h
).
Но /usr/src/linux-headers-2.6.31-22/include/asm-generic/
есть еще один, unistd.h
который начинается с этой директивы:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Итак, вопрос: как я могу узнать, какой из них загружен? Есть ли способ проверить это во время выполнения с Java?
unistd.h
это файл заголовка C; какое отношение это имеет к Java?Ответы:
Точные правила, применяемые
gcc
компилятором для поиска включаемых файлов, описаны по адресу: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html.Быстрый трюк командной строки, чтобы выяснить, откуда берутся включаемые файлы: 1
Затем, если вы посмотрите на
unistd.preprocessed
файл, вы заметите строки вроде:Они говорят вам, что следующий блок строк (до следующей
# number ...
строки) происходит из файла/usr/include/unistd.h
.Итак, если вы хотите узнать полный список включенных файлов, вы можете использовать grep для
# number
строк:В моей системе Ubuntu 10.04 / gcc 4.4.3 это выдает:
1 Примечание: путь поиска для включаемых файлов изменяется параметром
-I
командной строки; Итак, вы должны добавить любые-I path
аргументы кgcc
вызову. Кроме того, если вы компилируете исходный код C ++, вы должны заменить его-x c
на-x c++
.источник