J'ai un problème étrange avec les fichiers incluant et une déconnexion apparente entre le processus de construction d'Eclipse et son rapport d'erreur. Je vais donner des étapes détaillées pour reproduire ce problème, afin que nous puissions réduire les causes aussi rapidement que possible.
Eclipse 3.7.1 (Indigo SR1) pour les développeurs C / C ++ Linux, Ubuntu 10.10 64 bits P>
Tout a commencé lorsque j'ai importé un projet existant qui "fait" tout va bien seul: je pensais que Eclipse aiderait considérablement à naviguer dans les dossiers et à déterminer ce que fait quoi. Cependant, certains des en-têtes système code> #include code> D ne semblaient pas avoir l'effet correct de la vue Eclipse. C'était très perplexe et, au cours de l'enquête sur cela, j'ai réussi à recréer le problème dans une boîte de sable minuscule. P>
Étape 1: Créez un nouveau projet C ( Étape deux: ajustez le chemin Inclure. Utilisation de maintenant si vous ouvrez Ouvrez une fenêtre de ligne de commande et expliquez-vous dans votre Le plaisir commence maintenant. Modifier Vous obtiendrez une erreur sur le Si vous changez le préambule à: < / p> vous toujours em> Obtenez l'erreur sur la ligne C'est donc mon problème dans un mot: pourquoi est-ce l'éditeur (et tout Eclipse CDT) signale une erreur (apparemment en refusant de traiter correctement une inclusion), mais que la construction sous-jacente réussit? P> P> Fichier: Nouveau: Projet C Code>) Utilisation du projet
Hello World ANSI C Project Code> Sample. Les paramètres sont
exécutables: Bonjour World ANSI C Project / Linux GCC CODE>, le reste code> Vider les projets définis sur
Linux GCC CODE> et
GNU AutoTools Code> défini sur
Bonjour World ANSI C Autotools Project code>. Appelez-le "Bonjour". Assurez-vous de générer le maquillage automatiquement (paramètres avancés, je pense que c'est la valeur par défaut). P>
Projet: Propriétés: C / C ++ Généralités: Chemins et symboles: Inclus: GNU C CODE>, définissez le chemin de recherche sur
/ USR / local / Inclure code>,
/ usr /lib/gcc/x86_64-linux-gnu/4.4.5/include code>,
/ usr / include code>. Le deuxième chemin dépend de la version exacte de GCC que vous avez installée. Peu importe trop, tant que le chemin de construction inclut au moins
/ usr / include code>. P>
hello.c code> , il a l'air très simple et Eclipse est assez heureux, sauf pour
return exit_success; code>, qui ne peut pas résoudre
exit_success code>. Remplacer
EXIT_SUCCESS code> avec un zéro (
0 code>) et Eclipse donne le tout clair. Sélectionnez
Project: Créer le projet CODE> Pour générer l'exécutable. P>
Bonjour / débogage de l'Eclipse CODE> Sous-dossier. Une fois là-bas, vous pouvez exécuter l'exécutable avec la ligne
./ bonjour code>. P>
hello.c code> pour lire dans sa dernière partie: p>
int zz ... < / Code> Ligne:
"Symbole 'Splice_F_Move' n'a pas pu être résolu" code>. Si vous construisez le projet, vous obtiendrez une erreur similaire dans la vue de la console:
"Erreur: 'Splice_f_move' non déclaré" non déclaré " code>. P>
int zz code> (dans l'éditeur), mais le projet va construire correctement ! Vous pouvez le confirmer en exécutant le binaire dans la fenêtre de ligne de commande que vous avez ouverte plus tôt. C'est vraiment étrange depuis l'examen de
/usr/inclufr/fcntl.h code> indiquera que
#include code> s
#define code> s
splice_f_move code> (et un tas d'autres) dans un bloc gardé par
#Ifdef __use_gnu code> (
__ usu_gnu code> obtient
#define code> d si
_gnu_source code> est
#define code> d). Pourquoi sur Terre n'est-il pas notre
#define _gnu_source code> correctement propagé dans la perspective de l'espace de travail? P>
3 Réponses :
J'ai le même problème, mais je n'ai même rien fait de ce qui compliquait de le produire - je viens de faire un projet World Hello du type que vous décrivez et obtenez la même erreur. Notez que, cependant, dans mon cas, il peut être dû à une installation de cygwin de bougwin - par exemple, j'avais d'autres erreurs em> concernant l'échec d'inclure les fichiers .h et une suppression complète / réinstallation de Cygwin supprimé ces erreurs em>, mais le «symbole ... ne pouvait pas être résolu» reste d'erreur. P>
J'ai alors décidé de faire un seconde em> de ce projet, et ils signalent tous les deux une telle erreur dans la vue "Problèmes", mais seulement un em> des projets montre réellement le erreur soulignée, etc. dans l'éditeur (!) p>
Peut-être que ce problème vient de Ijndigo même. Avez-vous essayé de la même chose avec le dernier Indigo SR2? J'ai ouvert un certain nombre de bugs pour Indigo et son SR1 dans Eclipse Bugzilla. P>
J'ai eu des problèmes similaires à travailler avec GNU et Tools à outils confidentiels non-GNU pour la compilation de divers microcontrôleurs. CDT rapporte de nombreuses erreurs, mais la construction réelle fonctionne parfaitement, même lorsque tout l'en-tête comprend correctement les paramètres du projet. P>
Le problème est dans la façon dont CDT fonctionne comme distinct de votre système de fabrication. CDT est un lexère, un analyseur et un préprocesseur autonome, et n'utilise pas la compagnie d'outils que vous utilisez pour faire la construction. Cela fonctionnerait normalement une fois que vous avez défini les paramètres du projet pour les adapter à ceux générés comme des arguments de ligne de commande à vos outils de construction, mais de nombreux outils d'outils incluent fréquemment des définitions implicites cachées dans le cadre de leur compilateur / préprocesseur lui-même. La documentation pour la définition impliquée / cachée est généralement sommaire et incomplète dans mon expérience, ce qui rend presque impossible de déterminer les définitions définies pour une boîte à outils donnée (parfois même dépendante des options de construction) et de ce qu'ils veulent dire. Bien que cela puisse sembler que vous avez toutes les définitions correctes réglées pour atteindre celui que vous rencontrez un problème, je trouve habituellement (surtout avec GNU) qu'il y en a des manques qui empêchent l'interrupteur d'être traitée comme vous attendu. p>
Lorsque j'ai débogué quelque chose comme ceci, je vous assure d'abord que tous les en-têtes de mon répertoire de projet se trouvent en premier si elles ont des noms correspondant à ceux d'autres répertoires, puis je commence lentement à déplacer les en-têtes de la norme Inclure le dossier dans mon dossier de projet. CDT ne fait pas de très bon travail d'indiquer quelles versions possibles d'un fichier d'en-tête, elle apporte d'abord des paramètres de l'environnement système lorsque vous vous y attendez le moins, mais il regarde dans votre dossier de projet pour les en-têtes d'abord (si vous le refus. 'T Définissez le chemin des en-têtes du système dans les paramètres de votre projet pour primer). En déplaçant les en-têtes système de l'emplacement que vous consultez votre répertoire de projet, vous savez certainement exactement quel fichier d'en-tête est analysé par CDT. En outre, si vous reconstruisez votre index après le déménagement, ouvrez le fichier dans Eclipse, CDT indiquera les commutateurs qu'il croit être activé ou désactivé en grisonnant ou en pliant les branches non activées dans l'en-tête. Suite à ce processus a résolu ce problème exactement pour moi à chaque fois, révélant lorsque j'avais des chemins vers plusieurs copies de la même en-tête, des en-têtes dupliqués accidentellement, avaient défini ou inclut des interrupteurs inattendus, etc. P>
Avez-vous essayé de reconstruire l'index? Je crois que le CDT ne relève que des en-têtes externes si forcé et la première fois que l'en-tête est lu pour l'indexation qui inclut n'existe pas.