J'ai plusieurs unistd.h
fichiers dans mon Ubuntu Linux. J'en ai un /usr/include/asm/unistd.h
. Ce fichier a ces directives:
# ifdef __i386__
# include "unistd_32.h"
# else
# include "unistd_64.h"
# endif
Dans ce dossier, je peux trouver ces fichiers ( unistd_32.h
et unistd_64.h
).
Mais /usr/src/linux-headers-2.6.31-22/include/asm-generic/
il y en a un autre unistd.h
qui commence par ces directives:
#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H
Donc, la question est: comment puis-je savoir lequel est chargé? Existe-t-il un moyen de le vérifier lors de l'exécution avec Java?
unistd.h
est un fichier d'en-tête C; qu'est-ce que cela a à voir avec Java?Réponses:
Les règles exactes suivies par le
gcc
compilateur pour trouver les fichiers include sont expliquées à: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.htmlUne astuce en ligne de commande rapide pour savoir d'où vient un fichier include est la suivante: 1
Ensuite, si vous regardez le
unistd.preprocessed
fichier, vous remarquerez des lignes comme:Ceux-ci vous indiquent que le bloc de lignes suivant (jusqu'à la
# number ...
ligne suivante ) provient du fichier/usr/include/unistd.h
.Donc, si vous voulez connaître la liste complète des fichiers inclus, vous pouvez rechercher les
# number
lignes:Sur mon système Ubuntu 10.04 / gcc 4.4.3, cela produit:
1 Remarque: Le chemin de recherche des fichiers d'inclusion est modifié par l'
-I
option de ligne de commande; vous devez donc ajouter des-I path
arguments à l'gcc
invocation. De plus, si vous compilez une source C ++, vous devez remplacer-x c
par-x c++
.la source