Projet

Général

Profil

Actions

Assistance #398

ouvert

Compilation Herezh++ sur Linux

Ajouté par Julien Troufflard il y a 21 jours. Mis à jour il y a 18 jours.

Statut:
En cours
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
05/03/2026
Echéance:
% réalisé:

20%

Temps estimé:
Temps passé:

Description

Gérard,

je suis en train d'essayer de me mettre à jour sur la compilation de Herezh.
J'ouvre donc un sujet sur la compilation Herezh.

J'avais déjà essayé depuis la branche V_7.028 ou V_7.30. Et j'avais réussi d'après ce ticket : https://herezh.irdl.fr/issues/371
Mais ce n'était pas vraiment le sujet du ticket, et depuis, je n'ai jamais réussi à recompiler une version Herezh (avec CodeBlocks).

J'ai envie de repartir de la base en utilisant un Makefile (et le tout dans l'EDI : Visual Studio Code, qui est plus couramment utilisé que CodeBlocks, mais ceci n'a pas d'importance, ça revient à faire du Makefile dans un terminal).

J'ai refait un makefile en partant de la base et en m'inspirant de celui proposé dans Herezh_dev/fichiers_makefile/makefile_HZppfast.

Je travaille depuis la branche V_7.061.

Je vais commencer par 3 points pas vraiment bloquant mais à résoudre quand même :

1) Mon compilateur m'indique un problème venant de Herezh_dev/Util/Algo_Integ1D.h
à la fin de ce fichier, il y a un include du fichier Herezh_dev/Util/Algo_Integ1D_2.cc :

};
  // pour faire de l'inline: nécessaire avec les templates
  // on n'inclut que les méthodes templates
  #include "Algo_Integ1D_2.cc" 
  #define  Algo_Integ1D_deja_inclus
 /// @}  // end of group

#endif  

Ceci provoque une erreur car mon compilateur prétend que la fonction double Algo_Integ1D::IntegGauss serait déclarée plusieurs fois (error: redefinition of ...).

J'ai réussi à supprimer cette erreur en commentant la ligne concernée :

};
  // pour faire de l'inline: nécessaire avec les templates
  // on n'inclut que les méthodes templates
  //#include "Algo_Integ1D_2.cc" 
  #define  Algo_Integ1D_deja_inclus
 /// @}  // end of group

#endif  

et ceci, sachant que Algo_Integ1D_2.cc est déjà include dans mon Makefile.

Je remarque à ce sujet que le makefile proposé dans Herezh_dev/ ne fait pas d'include de ce fichier Algo_Integ1D_2.cc. Mais par contre, il le fait dans la version codeblock (il est include dans le fichier Herezh_dev/linux/Herezh.cbp).

Je réussis donc à surmonter cette erreur en mettant en commentaires, mais ça m'embête un peu de devoir modifier le fichier source alors que toi de ton côté tu ne le fais pas. Je serais obligé de refaire la manip à chaque nouvelle branche d'Herezh que tu vas produire.

As-tu une idée de comment procéder ?

2) dans le fichier Herezh_dev/Util/suites/Suite_geometrique.h ou .cc, il y a un include du fichier "Enum_Suite.h". Mon compilateur ne le trouve pas à cause d'une erreur de casse.

Dans le répertoire Herezh_dev/Enumeration/, on a d'une part un fichier Enum_Suite.cc (avec un S majuscule) mais d'autre part un fichier Enum_suite.h (avec un s minuscule).

Dans la même lignée que le 1), je pourrais modifier à la main en renommant Enum_suite.h en Enum_Suite.h. Mais pour la même raison, j'attends ton avis là-dessus.

3) toutes ces tentatives de compilation ont été faites dans la norme : -std=gnu++98. En fait, j'ai pas mal d'erreur si j'essaye un standard plus récent. Mon gcc est en c++17 par défaut.

Je ne vois aucune option à ce sujet dans les Makefile de Herezh_dev/. As-tu une idée de la norme utilisée de ton côté quand tu compiles sur Linux.
Pour connaitre celle de mon gcc par défaut, j'ai fait :

echo | gcc -x c++ -dM -E - | grep __cplusplus

qui m'a renvoyé :
#define __cplusplus 201703L

c'est-à-dire la norme c++17

pour info, a priori, si j'étais en norme gnu++98 (ou c++98), j'aurais obtenu : #define __cplusplus 199711L

Actions

Formats disponibles : Atom PDF

Redmine Appliance - Powered by TurnKey Linux