undefined reference, \ dans le makefile

undefined reference, \ dans le makefile

by Gaétan Herold -
Number of replies: 2
Bonjour,


Lors de la compilation, nous sommes confrontés au problème suivant:

Le terminal affiche un message d’erreur de type:

g++ -c -o main.o main.cc
g++ main.o classgame.o simulation.o tools.o verify.o game.o -o projet simulation.o: In function `initialisation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)': /home/veuthey/Desktop/Projet (7)/simulation.cc:82: undefined reference to `verifallplayer(double, unsigned long&, unsigned long&)'

Cela suggérerait que nous n’avons pas inclus verify.h dans le fichier simulation.cc, ou alors que nous avons fait des fautes de syntaxe. Deux heures de vérification nous indiquent cependant que ce n’est probablement pas le cas.

Une des sources d’erreur possible serait un problème de makefile, nous avons en effet repéré un symbole « \ » avant les trois derniers .h dans la ligne indiquant les dépendances de simulation.o, nous nous demandons donc si le problème ne vient pas de là. Nous avons essayé de compiler avec le makefile de la série 1, puis avec celui fourni sur le forum par un assistant pour régler certains problèmes, mais les deux présentent ce résultat:

simulation.o: simulation.cc tools.h classgame.h define.h game.h \ simulation.h error.h verify.h

De où peut venir ce problème, est-ce lié au \, ou pas du tout.

Merci d’avance de vos réponses et bonne fin de journée.
In reply to Gaétan Herold

Re: undefined reference, \ dans le makefile

by Vincent Bruno Christophe Tournier -

Salut,

Cela semble en effet être un problème du linker qui est incapable de trouver la fonction demandée dans les classes passées en dépendances.

Est-ce que par hasard verifallplayer() ne serait pas implémentée dans une classe définie dans un .o que vous avez oublié dans les dépendances de la cible finale ?

Si vous utilisez le makefile de la Série 1, n'oubliez pas de taper make clean puis make depend afin de regénérer les dépendances des cibles.

Ce backslash est particulier en effet, je vous conseille de le retirer dans le doute, ça peut pas faire de mal.

Cheers

In reply to Gaétan Herold

Re: undefined reference, \ dans le makefile

by Gaétan Herold -

Bonjour,

Le professeur Boulic a regardé mon code et a découvert que l’erreur venait d’une déclaration qui ne correspondait pas à l’implémentation. En effet, l’implémentation demandait un double passé par référence constante alors que la déclaration déclarait un double passé par valeurs.

On avait donc:

bool mafonctionbooléenne (double, int&, int&);

comme prototype et:

bool mafonctionbooléenne (const double &param1, int %param2, int %param3)

{}  comme implémentation.

Pour une raison que je n’ai pas pensé à demander, ceci passait la compilation, mais échouait à l’édition des liens. (si je ne m’abuse)

Par ailleurs, M.Boulic a remarqué que avoir un makefile avec un SRC1 pour tous les fichiers sauf projet.cc et un SRC2 pour projet.cc seulement, comme cela a été suggeré sur le Forum n’est pas la pratique usuelle. Même si ça n’était pas ici la cause du problème.

Bonne soirée et merci de votre aide


Gaétan Herold