web-dev-qa-db-fra.com

Eclipse Indigo CDT: la fonction n'a pas pu être résolue

Cela semble idiot, mais cela fait 2 jours ... quelque part après la mise à niveau d'Ubuntu 10.04 vers 10.11 et d'Eclipse Helios vers Eclipse Indigo, je suis resté coincé avec le problème suivant:

Description du problème:

J'essaie d'utiliser une fonction en math.h appelée isinf (), mais le problème se produit également avec des choses comme isnan ().
Le programme compile bien sur la ligne de commande en utilisant make et bien dans Eclipse en utilisant build.
Mais si j'ouvre le fichier programme dans Eclipse, il signale qu'il ne peut pas résoudre à nouveau l'appel de fonction isinf ().
Si j'insère simplement le contenu du programme dans un nouveau projet et un nouveau fichier source, l'erreur apparaît immédiatement.
Ce problème ne s'est pas produit sous 11.04 avec Eclipse Helios CDT

Des questions:

Pourquoi ces erreurs ne sont-elles signalées que lorsque le fichier programme est ouvert et non lorsque le programme est compilé; pourquoi les erreurs non détectées sont-elles exécutées à partir de la ligne de commande?
Existe-t-il une solution/solution de contournement disponible?

Informations sur la version

Linux Ubuntu 10.11 64 bits
Eclipse CDT Indigo, Service Release 1, Build id: 20110916-0149
(Utilisation également d'Eclipse EE Indigo - si cela fait une différence)
GNU Make 3.81
gcc 4.6.1-9Ubuntu3

Pour dupliquer:

Veuillez trouver les deux fichiers que vous devrez répliquer ci-dessous:

Étape 0. Vérifiez que tout va bien en dehors d'Eclipse
Copiez le fichier source joint et créez le fichier
créez un répertoire, par ex. Mkdir FunTest
Enregistrez le fichier source sous 'Test.cpp' et le makefile sous 'makefile'
Ouvrez une invite de commande et accédez au répertoire, par exemple FunTest
Entrez 'make'
Entrez ./TestOut
Le programme répond "n'est pas infini"

Étape 1. Créez le projet dans Eclipse
Ouvrez Eclipse
Sélectionnez Fichier | Nouveau | Projet MakeFile avec le code existant
Cliquez sur Parcourir - accédez au répertoire (FunTest) et cliquez sur ok
Sélectionnez 'Linux GCC' dans le sélecteur de chaîne d'outils
Cliquez sur Terminer

Étape 2. Trouver l'erreur
Cliquez sur Tout construire (Ctrl-B) - le projet se construit sans erreur
Ouvrez le projet dans l'explorateur de projet pour afficher le fichier dans le répertoire
Double-cliquez sur le fichier "Test.cpp"
Notez l'icône d'erreur à côté du test de ligne pour l'infini
Notez les 2 messages d'erreur:

Semantic error: Function _isinff could not be resolved 
Semantic error: Function _isinfl could not be resolved

Test.cpp:

include <math.h>

int main(int argc, char **argv)
{

int TestNum = 10;

if (isinf(TestNum) == 0)
    printf("Not infinite\n");


return 0;

}

makefile:

# Specify the compiler
CC = g++

# Specify the compiler flags
CFLAGS += -c

# Specify the files making up the application
SOURCES = Test.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECUTABLE = TestOut

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) $(LDLIBS) -o $@

.cpp.o:
    $(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@

install:
    @echo "Build complete!"
22
myk

J'ai rencontré des problèmes similaires d'erreurs de rapport CDT même si le code a été correctement compilé dans Eclipse Indigo.

Projet> Propriétés> Paramètres> Analyseurs binaires> "GNU Elf Parser"

aidé dans mon cas. J'ai fait vérifier "Elf Parser".

7
Fabian

Cela ressemble à un problème que beaucoup d'autres ont rencontré avec Eclipse CDT auparavant. Parfois, arrêter Eclipse puis le redémarrer est suffisant pour vous aider. Si ce n'est pas le cas, jetez un œil à ce que j'ai ci-dessous:

Compilation ok, mais le contenu Eclipse aide à avoir des problèmes

4
Adam Miller

Vérifiez vos inclusions: si vous utilisez include<math.h> changez-le en include<cmath>. Pareil pour stdio.h et stdlib.h, vous devez remplacer par cstdio et cstdlib. Une autre option peut être de changer votre projet en projet C au lieu d'un C++.

3
tbellardi

Pour moi, cela a été résolu en ajoutant un dossier spécifique "Emplacement source" et en supprimant la valeur par défaut. A Luna, c'est sous:

Projet> Propriétés> C/C++ Général> Chemins et symboles> Emplacement source

0
andraaspar

Il manque l'option -lm dans vos préférences de construction. Project-> Properties-> Settings-> Miscleanous-> Other (linker) flags []

0
pruzinat