103 votes

Erreur "Unresolved inclusion" avec Eclipse CDT pour les headers de la bibliothèque standard C

J'ai configuré CDT pour eclipse et j'ai écrit un simple programme C "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 l'instruction d'inclusion qui dit "Unresolved inclusion: <stdio.h>" quand je passe la souris dessus.

Cela n'affecte pas le fonctionnement du programme mais je trouve cela plutôt gênant.

Quelqu'un a-t-il une idée de la façon de l'enlever ?

2 votes

On pourrait penser que l'exemple Hello World le ferait pour vous, ou au moins vous aiderait. Si Eclipse n'inclut pas de compilateur, pourquoi ne le fait-il pas ?

0 votes

56voto

aaaidan Points 2614

J'ai trouvé ces réponses (y compris celle qui a été acceptée) quelque peu énigmatiques.

Pour moi, j'ai dû ajouter le chemin où se trouve stdio.h (comme l'a dit @ardnew). Dans Eclipse, vous ouvrez les propriétés de votre projet, développez "C/C++ General" et sélectionnez "Paths and Symbols".

Assurez-vous que vous avez ajouté le include dir pour chaque langue que vous utilisez. (Dans mon cas, je devais juste l'ajouter à GNU C++).

Screenshot of Eclipse "Project Properties" dialog with "Paths and Symbols" selected. An "add directory path" dialog is overlaid.

1 votes

C'est étrangement proche de ce dont j'avais besoin ! J'ai juste dû changer le nom d'utilisateur dans le chemin.

2 votes

Sous OS X, vous devrez peut-être installer manuellement les outils de développement en ligne de commande (ce qui nécessite d'abord d'installer Xcode) en utilisant la commande /usr/bin/xcode-select --install et vous pourrez alors pointer Eclipse sur /usr/include/

1 votes

Sur Yosemite. Utilisation d'Eclipse Juno. Cela a fonctionné pour moi, sauf que le chemin que j'avais donné était un peu différent (/Users/SrinivasanNatarajan/Android-ndk/platforms/Android-19/arch-arm/usr/include). Même si toutes les erreurs non résolues ont disparu, j'ai toujours un doute sur le fait que j'ai défini le bon chemin. "Eclipse est vraiment nul". J'ai dû passer des heures à configurer l'IDE pour le développement.

54voto

ardnew Points 552

Le compilateur utilisé par Eclipse est capable de résoudre les symboles sans problème, et le code sera donc bien compilé.

Mais le compléteur de code, l'indexeur ou le préprocesseur qu'Eclipse utilise ne sait pas où stdio.h existe.

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

La documentation Eclipse décrit cela dans plusieurs sections pour le compilateur :

Et si le compléteur/indexeur de code ou le préprocesseur spécifique ne peut pas non plus localiser stdio.h :

L'emplacement exact de stdio.h dépendra du système pour lequel vous avez l'intention d'écrire le code. Si vous écrivez du code pour le même système que celui sur lequel vous exécutez Eclipse, l'emplacement standard est le suivant /usr/include/stdio.h pour Linux, macOS, Cygwin, etc.

Si vous effectuez une compilation croisée pour un système cible distinct/éloigné (par exemple Android, Raspberry Pi, STM32), elle sera située quelque part dans le SDK que vous avez installé pour ce système. Vous devrez vous référer à la documentation de ce SDK particulier.

2 votes

Merci pour la réponse. Mais où se trouve le chemin pour Ubuntu 11.10 ?

0 votes

Une chose qui m'a dérouté est que j'ai dû ajouter le chemin dans l'onglet "includes", plutôt que dans l'onglet "library paths". J'ai toujours pensé que les includes "anglebracket" étaient des includes "library".

1 votes

Vous indiquez où trouver les fichiers d'en-tête (c'est-à-dire les fichiers .h) dans l'onglet includes. Vous indiquez à l'éditeur de liens où il peut trouver les fichiers de bibliothèque compilés dans l'onglet library path. La convention entre les guillemets et les crochets d'angle dépend probablement du compilateur, mais j'ai toujours pensé que <> signifiait chercher d'abord dans la bibliothèque système standard et que "" signifiait chercher d'abord dans mon projet.

17voto

Ray Tayek Points 4635

J'ajoute juste à la base de connaissances, je viens de faire cela sur win7 avec cygwin.

c'est ce qui semble fonctionner pour moi.

inclure des chemins pour c :

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

chemins d'inclusion 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 permet d'obtenir une compilation propre de hello world.

0 votes

Je viens du futur. Je suis venu vous dire merci. C'est en fait la première chose qui a fonctionné pour moi. Je n'ai jamais eu un bonjour au monde aussi difficile. Merci, monsieur.

11voto

  • Sélectionnez Fichier>>Nouveau projet
  • Dans l'assistant de projet, sélectionnez C/C++>> Projet C++
  • Dans la section "Type de projet", sélectionnez " Makefile Projet>> Hello world C++ Projet "
  • Dans la section "Toolchains", sélectionnez " Linux GCC "

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

1 votes

J'ai fait ces choses, mais il n'a toujours pas reconnu que les en-têtes sont dans /usr/include.

0 votes

C'est beaucoup plus facile que d'ajouter chaque inclusion soi-même. J'ai utilisé l'option multiplateforme, qui a également bien fonctionné (sur Ubuntu).

0 votes

Très utile ! Excellent anglais.

1voto

user330844 Points 366

Dans ADT, j'ai fait ce qui suit :

  1. cliquez à droite sur le projet et sélectionnez Propriétés
  2. développer C/C++ General et sélectionner Preprocessor Include Paths, Macros etc.
  3. sélectionner les entrées de paramètres utilisateur CDT
  4. Sélectionnez Ajouter... dans le menu de droite.
  5. Dans le répertoire d'inclusion, changez le chemin du projet en chemin du système de fichiers.
  6. Naviguez jusqu'au répertoire qui contient vos fichiers d'inclusion
  7. remuer et répéter si nécessaire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X