Où sont stockés les fichiers include-Ubuntu Linux, GCC

Donc, quand nous faisons ce qui suit:

#include <stdio.h>

Contre

#include "myFile.h"

Le compilateur, GCC dans mon cas, sait où ce stdio.h (et même le fichier objet) sont situés sur mon disque dur. Il utilise simplement les fichiers sans interaction de ma part.

Je pense {[11] } que sur ma machine Linux Ubuntu les fichiers sont stockés à /usr/include/. comment le compilateur sait - il où chercher ces fichiers? est-ce configurable ou est-ce juste la valeur par défaut attendue? Où pourrais-je regarder pour cette configuration?

puisque je pose une question sur ces fichiers include, Quelle est la source des fichiers? Je sais que cela pourrait être flou dans la communauté Linux, mais qui les gère? Qui fournirait et gérerait les mêmes fichiers pour un compilateur Windows.

J'ai toujours été sous l'impression qu'ils venez avec le compilateur, mais c'était une hypothèse...

63
demandé sur Frank V 2009-08-02 05:26:50

4 réponses

Voir ici: Chemin de Recherche de

Résumé:

#include <stdio.h>

Lorsque le fichier include est entre parenthèses, le préprocesseur recherche d'abord dans les chemins spécifiés via l'indicateur -I. Ensuite, il recherche les chemins d'inclusion standard (voir le lien ci-dessus, et utilisez l'indicateur - V pour tester sur votre système).

#include "myFile.h"

Lorsque le fichier à inclure est devis le préprocesseur recherche d'abord dans le répertoire courant, puis les chemins spécifiés par -iquote, puis -I chemins, la norme chemins.

-nostdinc peut être utilisé pour empêcher le préprocesseur de rechercher les chemins standard.

Les variables d'Environnement peut également être utilisé pour ajouter des chemins de recherche.

Lors de la compilation si vous utilisez v drapeau, vous pouvez voir les chemins de recherche utilisé.

41
répondu Karl Voigtland 2009-08-02 02:17:36

Gcc est un programme "orchestrant" riche et complexe qui fait appel à de nombreux autres programmes pour remplir ses fonctions. Dans le but spécifique de voir où #include "goo" et #include <zap> vont rechercher sur votre système, je recommande:

$ touch a.c
$ gcc -v -E a.c
 ...
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i686-apple-darwin9/4.0.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
# 1 "a.c"

C'est une façon de voir les listes de recherche pour les fichiers inclus, y compris (le cas échéant) les répertoires dans lesquels #include "..." regardera mais #include <...> ne sera pas. cette liste spécifique que je montre est en fait sur Mac OS X (aka Darwin) mais les commandes que je recommande vous montrera les listes de recherche (ainsi comme détails de configuration intéressants que j'ai remplacés par ... ici; -) sur n'importe quel système sur lequel gcc fonctionne correctement.

42
répondu Alex Martelli 2009-08-02 01:46:48

Karl a répondu à votre question search-path, mais en ce qui concerne la "source des fichiers", une chose à savoir est que si vous installez le paquet libfoo et que vous voulez faire du développement avec lui (c'est-à-dire utiliser ses en-têtes), vous devrez également installer libfoo-dev. Les fichiers d'en-tête de bibliothèque standard sont déjà dans /usr/include, comme vous l'avez vu.

Notez que certaines bibliothèques avec beaucoup d'en-têtes de les installer dans un sous-répertoire, par exemple, /usr/include/openssl. Pour inclure l'un de ceux-ci, il suffit de fournir le chemin sans le /usr/include partie, par exemple:

#include <openssl/aes.h>
8
répondu Meredith L. Patterson 2009-08-02 01:38:21

Le \#include fichiers de gcc sont stockés dans /usr/include . Les fichiers include standard de g++ sont stockés dans /usr/include/c++.

1
répondu Manish Bhadani 2017-07-24 06:46:46