Compilation du projet (VM EPFL obsolète)

Compilation du projet (VM EPFL obsolète)

by Noureddine Abdel Mélik Gueddach -
Number of replies: 8
Bonjour,
Bien que notre projet compile sans aucun problème sur n'importe quelle version Ubuntu (3 de testées), il se trouve que le projet ne compile pas sur la VM-EPFL. On a regardé sur le net et trouvé le forum suivant : https://stackoverflow.com/questions/12975341/to-string-is-not-a-member-of-std-says-g-mingw qui explique un peu la situation... Comme expliqué sur le post, c'est un problème connu (pas de l'EPFL?) facile à corriger, mais n'ayant pas de droit administrateur sur la VM de l'école, insolvable.
Alors la question est : est-ce qu'on part du principe que le projet sera évalué sur une machine virtuelle normale et fonctionnelle? Et sinon quelles sont les solutions?

Merci d'avance.

P.S: Voici une capture d'écran du terminal
https://moodlearchive.epfl.ch/2018-2019/pluginfile.php/2561572/mod_forum/post/30066/Capture.PNG
P.S.2: Ceci est un problème également rencontré par d'autres groupes.
In reply to Noureddine Abdel Mélik Gueddach

Re: Compilation du projet (VM EPFL obsolète)

by Ronan Boulic -

d'après la capture d'écran, votre commande de compilation ne contient pas l'option -std=c++11

Qu'obtenez-vous avec cette option ?

In reply to Ronan Boulic

Re: Compilation du projet (VM EPFL obsolète)

by Léane Marie Josée Donzé -

Bonjour,

Nous avons le même problème tout en ayant la commande -std=c++11 dans les CFLAGS du Makefile.

Auriez-vous une autre idée de la cause du problème ?

In reply to Léane Marie Josée Donzé

Re: Compilation du projet (VM EPFL obsolète)

by Ronan Boulic -

le projet contient to_string dans error.h ; il compile avec C++11 sur la VM du semestre de printemps.

Avez-vous la directive ci-dessous dans votre code utilisant to_string ?

#include <sstream>

In reply to Ronan Boulic

Re: Compilation du projet (VM EPFL obsolète)

by Théo Stanislaw Gieruc -

La solution que j'ai trouvé à ce problème est de changer de Makefile, j'en ai pris un venant d'un forum (https://stackoverflow.com/questions/12898287/how-to-add-compile-flag-g-to-a-make-file)

Il me semble que cela vient du fait que les .cc ne sont pas compilés avec -std=C++11, à l'exception de projet.cc (la commande par défaut étant g++ -o exemple.o exemple.cc)

Je joins à ce poste mon Makefile, il suffit de rajouter à "SRC1="  les fichiers .cc que vous utilisez, sans projet.cc qui est déjà dans "SRC2". Par exemple SRC1=ball.cc player.cc map.cc simulation.cc

En espérant que cela résout votre problème.

(Avec ce Makefile, il n'y a plus besoin de faire de make depend, make clean est toujours disponible)

In reply to Théo Stanislaw Gieruc

Re: Compilation du projet (VM EPFL obsolète)

by Vincent Bruno Christophe Tournier -

Pour la postérité, j'ai déjà eu l'occasion de conseiller à des étudiants qui avaient un problème similaire de produire un nouveau makefile utilisant des règles moins implicites que celles fournies par le makefile de la première serie (qui ne détaille jamais vraiment les commandes permettant de produire le .o en utilisant des conventions implicites de make)

Cela a fonctionné, donc ça peut être une idée.

In reply to Léane Marie Josée Donzé

Re: Compilation du projet (VM EPFL obsolète)

by Eric Bolliger -

Bonsoir,

D'après ce que j'ai trouvé à l'aide de stackoverflow.com, il est bien possible d'utiliser le makefile (donné en série 1) avec les fonctions spécifiques clean and depend. La seule chose posant des problèmes avec ce makefile est le mot-clef CFLAGS, car c'est une variable spécifique standard qui représente les "compilation flags" du langage C. Pour avoir accès au "compilation flags"  de C++, on doit utiliser le mot-clef CXXFLAGS.
En échangeant à chaque endroit (aussi dans la commande depend) CFLAGS par CXXFLAGS, le makefile donné marche, en tout cas chez moi, sans problème.


Extrait de https://stackoverflow.com/questions/2481269/how-to-make-a-simple-c-makefile/2481326:

«Variables Used By Built-in Rules

The built in rules use a set of standard variables that allow you to specify local environment information (like where to find the ROOT include files) without re-writing all the rules. The ones most likely to be interesting to us are:

  • CC -- the c compiler to use
  • CXX -- the c++ compiler to use
  • LD -- the linker to use
  • CFLAGS -- compilation flag for c source files
  • CXXFLAGS -- compilation flags for c++ source files 
... »
In reply to Eric Bolliger

Re: Compilation du projet (VM EPFL obsolète)

by Ronan Boulic -

Bonne remarque ; un doctorant va mettre à jour les documents de cette série.

In reply to Ronan Boulic

Re: Compilation du projet (VM EPFL obsolète)

by Noureddine Abdel Mélik Gueddach -

Bonsoir,

Non le makefile contient bien la commande -std=c++11 dans les CFLAGS, mais il n'est pas pris en compte pour on ne sait quelle raison.

J'ai essayé la solution proposée et ça fonctionne! Merci.

Pour ceux qui veulent essayer, n'oubliez pas de bien mettre des tabulations et non pas des espaces et de bien faire les indentations dans le makefile, sinon ça ne compilera pas.