web-dev-qa-db-fra.com

Erreur "Inclusion non résolue" avec les en-têtes de bibliothèque standard Eclipse CDT for C

J'ai créé CDT pour Eclipse et écrit un programme simple Hello World:

#include <stdio.h>

int main(void){
    puts("Hello, world.");
    return 0;
}

Le programme se construit et s’exécute correctement, mais Eclipse continue d’afficher ce point d’interrogation jaune à côté de la déclaration d’inclusion mentionnant "Unresolved inclusion: <stdio.h>" lorsque je la place au-dessus de la souris.

Cela n’affecte pas le fonctionnement du programme mais je le trouve plutôt ennuyeux.

Est-ce que quelqu'un a une idée de comment l'enlever?

88
Spirit Zhang

Le compilateur utilisé par Eclipse est capable de résoudre les symboles correctement, de sorte que le code se compile correctement.

Mais le pré-processeur/achèvement de code utilisé par Eclipse ne sait pas où existe stdio.h.

Vous devez spécifier le chemin du système de fichiers où se trouve stdio.h.

Voir: http://help.Eclipse.org/galileo/index.jsp?topic=/org.Eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm

48
ardnew

J'ai trouvé ces réponses (y compris celle acceptée) un peu cryptiques.

Pour moi, je devais ajouter le chemin où se trouve stdio.h (comme @ardnew l'a dit). Dans Eclipse, vous ouvrez les propriétés de votre projet, développez "Général C/C++" et sélectionnez "Chemins et symboles".

Assurez-vous d'avoir ajouté le répertoire include pour chaque langue que vous utilisez. (Dans mon cas, je devais simplement l'ajouter à GNU C++.)

enter image description here

45
aaaidan

en ajoutant simplement à la base de connaissances, je viens de faire ceci sur Win7 avec Cygwin.

c'est ce qui semble fonctionner pour moi.

inclure les chemins pour c:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\usr\include

inclure des chemins pour c ++:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
D:\dev\cygwin\usr\include

cela me donne une compilation propre de bonjour le monde.

17
Ray Tayek

Sélectionnez Projet> Propriétés> Général C/C++> Le préprocesseur inclut> Fournisseurs Et sélectionnez "Paramètres du compilateur intégré CDT GCC" et "Paramètres du compilateur intégré CDT CROSS GCC". 

15
Mike B
  • Sélectionnez Fichier >> Nouveau projet
  • Dans l'assistant de projet, sélectionnez C/C++ >> Projet C++
  • Dans la section "Type de projet", sélectionnez " Projet Makefile >> Hello world C++ Project "
  • Dans la section "Chaînes d'outils", sélectionnez " Linux GCC "

Cela peut résoudre le problème. (Excusez-moi pour le mauvais anglais)

10

Je travaille avec plusieurs configurations de compilateur croisé, où je dois utiliser différents emplacements pour les fichiers d'en-tête STD (et d'autres variables d'environnement).

La solution consistait à configurer l'indexeur afin qu'il utilise la configuration active.
Malheureusement, à cause d’un bogue dans Eclipse, l’option n’est pas stockée localement. Vous devez donc utiliser la configuration workspace si vous souhaitez enregistrer la configuration à l’ouverture d’Eclipse encore.

Fenêtre -> Préférences -> C/C++ -> Indexeur -> Utiliser la configuration de construction active

Cela obligera Eclipse à utiliser le compilateur approprié, défini avec la configuration Cross GCC active du projet.

4
Yochai Timmer

J'utilise Eclipse avec Cygwin et cela a fonctionné pour moi:

Sélectionnez Projet> Propriétés> C/C++ Général> Le préprocesseur inclut ...> Fournisseurs Et sélectionnez "Paramètres du compilateur intégré CDT GCC Cygwin [Partagé]". 

4
superm0

J'utilise CodeWarrior IDE basé sur Eclipse pour les projets intégrés et je viens de résoudre ce problème en supprimant et en rajoutant les adresses source dans Project Properities-> C/C++ General-> Path et Sybols-> Include Directories. Cela signifie qu'il existe de nombreuses raisons de prendre le message "Inclusion non résolue:" et qu'il existe également de nombreuses solutions.

1
Enes Akyay

Dans ADT j'ai fait ce qui suit:

  1. faites un clic droit sur le projet et sélectionnez Propriétés
  2. développez Général C/C++ et sélectionnez Chemins d'inclusion de préprocesseur, Macros, etc.
  3. sélectionner les entrées de paramètres utilisateur CDT
  4. sélectionnez Ajouter ... dans le menu de droite
  5. Dans Ajouter un répertoire d'inclusion, changez le chemin du projet en chemin du système de fichiers
  6. Naviguez jusqu'au répertoire contenant vos fichiers d'inclusion
  7. remuer et répéter au besoin
1
user330844

Normalement, Eclipse devrait pouvoir résoudre automatiquement les fichiers d'inclusion standard. Pour ce faire, il appelle gcc et demande sa configuration. Eclipse ne trouve probablement pas votre gcc (ou du moins pas la version que vous utilisez pour la compilation).

Au lieu de spécifier tous les chemins d'inclusion standard dans les paramètres du projet, vous voulez probablement vous assurer qu'Eclipse trouve gcc. Ajoutez le répertoire où se trouve gcc à la variable d’environnement PATH avant de démarrer Eclipse.

Si vous souhaitez que différents projets utilisent différents compilateurs, vous pouvez ajuster les options de découverte. Celles-ci sont masquées par défaut. Activez-les d'abord dans Fenêtre> Préférences> C/C++> Paramètres des pages de propriétés> Afficher la page "Options de découverte". Ensuite, vous pouvez les trouver sous C/C++ Construire> Options de découverte dans les propriétés du projet. 

1
Seppo Enarvi

Une erreur que j'ai eu lors de la configuration des chemins et des symboles est que j'ai initialement configuré les chemins d'inclusion pour un autre langage. Je travaille avec CDT et Cygwin GNU C++. Vous devez donc configurer les symboles et les chemins sous le langage GNU C++.  enter image description here

0
rodolk

Comme le notent les réponses actuelles (en haut), il est nécessaire de spécifier l'emplacement des dossiers de construction, qui peuvent être ajoutés via une boîte de dialogue accessible en cliquant avec le bouton droit sur le projet et en sélectionnant Propriétés-> C/C++ Général-> Chemins et symboles.

La question restante est de savoir quels chemins doivent être ajoutés.

Si vous faites de la compilation croisée ou faites quelque chose d'extraordinaire, vous savez probablement quels chemins vous avez besoin et dans quel ordre (ou devriez consulter la documentation de votre compilateur et/ou d'autres dépendances).

Pour ceux qui recherchent les bases: si vous avez correctement configuré gcc pour un accès en ligne de commande et avez besoin de connaître les chemins d’inclusion par défaut qu’il utilise, il suffit de le lui demander. 

Selon la langue qui vous intéresse, utilisez:

gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null

... ceci listera les paramètres par défaut du compilateur utilisés lors de l'appel de gcc (et cette commande fonctionne également si "gcc" est vraiment un alias pour clang, comme sur OSX). 

Sous Windows, notez que /dev/null n'est qu'un raccourci facile pour un fichier d'entrée vide (sans avoir à en créer un).

Vers le bas se trouvera la liste des répertoires include:

#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.

Si vous entrez les répertoires énumérés ici, dans l'ordre indiqué, dans la boîte de dialogue des chemins et des symboles d'Eclipse, Eclipse CDT devrait pouvoir rechercher les en-têtes standard, et éventuellement d'autres en-têtes spécifiques à votre système d'exploitation.

(Merci à réponse de devnull à une question connexe.)

0
Theodore Murdock