IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Compilation gcc avec des structures


Sujet :

Fortran

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut Compilation gcc avec des structures
    Bonjour à tous.

    Je travaille sur un outil qui au départ était compilé sur le compilateur intel.
    La version de fortran utilisé n'est pas très claire (un mélange de 77, 95 et peut-être même de 2003).

    Je souhaite le compiler en utilisant le compilateur gnu.
    Dans le code, j'ai ce genre de lignes là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     IF (Param%Nbp.EQ.0) RETURN
    J'ai découvert que l'utilisation du caractère pourcent permettait de jouer avec des structures de données.
    Le problème c'est qu'à la compilation j'ai un message d'erreur de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    programme.f:101.24:
     
          IF (Param%Nbp.EQ.0) RETURN
                            1
    Error: Syntax error in IF-expression at (1)
    Ma question est la suivante : est-ce une possibilité de fortran qui a été introduite dans les versions 2003 2008 et qui ne serait pas supportée par le compilateur gnu ?
    Est-ce qu'une option de compilation est manquante (j'ai du rechercher les équivalences d'options entre ifort et gfortran)?

    merci d'avance

    (je précise que je ne peux pas diffuser de code, et que je ne suis pas censé modifier le fichier source en question)

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Bonsoir.
    C'est quel compilateur GNU ? G77 ou gfortran ?

    G77 ne permets pas d'utiliser les structures.

    Je crois que gfortran identifie les fichiers *.f à du fortran 77.
    Essaie de changer l'extension par *.f90.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par __dardanos__ Voir le message
    Bonsoir.
    C'est quel compilateur GNU ? G77 ou gfortran ?

    G77 ne permets pas d'utiliser les structures.

    Je crois que gfortran identifie les fichiers *.f à du fortran 77.
    Essaie de changer l'extension par *.f90.
    Le .f vs .f90 indique que la source est au format fixe ou au format libre respectivement. Le format fixe est l'ancien format « carte perforée ». Les compilateurs Fortran 77 ne supportent que le format fixe. Les compilateurs Fortran 95 et plus supportent les 2. Mais ce n'est qu'une question de format, pas de langage. Rien n'empêche de coder en format fixe du Fortran 2008.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    il me semblais que gfortran faisait partie de gcc (gnu compiler collection) et donc gnu. Et du coup ce serai la meme chose. Pour g77 je ne sais pas.

    Effectivement, le format fixe ou libre ne permet pas forcément de savoir si on est sur du fortran 77 ou du >=95.
    D'ailleurs, sur le code sur lequel je travaille, il était au départ en 77 donc en format fixe, puis il a évolué vers du 95 mais toujours avec le format fixe dans (presque) tous les fichiers. On a donc un mélange des deux versions.

    Vous pensez vraiment que de changer l'extension changera quelque chose ? il n'y aurait pas une option de compilation qui permettrait de jouer là dessus ? parceque ce n'est pas un petit code... je n'ai pas vraiment envie de renommer quelques centaines de fichiers
    Et puis si ifort sait le faire... pourquoi pas gfortran ?

    Je n'ai pas accès aux fichiers tout de suite, mais je tenterai le coup des changements d'extension. Par contre, j'avoue que le passage des options de ifort vers les options de gfortran n'est pas simple...

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Sylvain a raison. L'extension renvoie au format et pas au langage.

    Pour répondre explicitement à la question, les structures (types personnalisés) ont été introduites dans le FORTRAN 90.

    Je n'ai jamais eu de problème pour compiler avec gfortran un programme en FORTRAN 90 contenant des structures. J'utilisais les options par défaut.
    Mais je n'ai jamais fait de projets mélangeant plusieurs normes.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Je pense qu'on fait fausse route avec les extensions. Généralement, quand un passage de ifort à gfortran est difficile, c'est parce que le code source utilise des extensions au langage. ifort est particulièrement fort pour supporter de vieilles extensions alors que gfortran est particulièrement faible.

    Si on revient au problème de l'erreur dans l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          IF (Param%Nbp.EQ.0) RETURN
    Il y a quelques pistes à chercher :
    • Es-tu certain d'utiliser gfortran ?
    • Comment Param est déclaré ?
    • Y-a-t-il une erreur à la déclaration de Param ?
    • Est-ce que Nbp est bien membre de Param ?
    • Est-il possible que Nbp soit lui-même un type contenant le membre EQ ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    Merci pour toutes vos réponses

    pour répondre à Sylvain Bergeron :

    effectivement, j'utilise gfortran, puisque j'ai moi même installé les compilateurs gnu (dans lequel se trouve gfortran).
    Je n'ai pas le pc en question avec moi, mais je suppose qu'une sortie de type gfortran -v donnera une info sur la version. Je pourrai la poster dès que j'aurais accès au pc en question.

    Je ne sais plus comment param est déclaré. J'avais regardé au moment de la compilation, mais rien ne m'avait choqué. Et je n'ai pas vérifié que nbp était bien membre de param. comme je n'ai pas mes outils de travail aujourd'hui, je ne peux pas donner l'information tout de suite.

    l'erreur que j'ai indiqué dans le premier post est la première erreur que me donne le compilateur. Il n'y a donc pas d'erreur à la déclaration de param.

    Est-ce que nbp est lui même un type contenant EQ, je ne pense pas. Je vérifierai, mais si c'était le cas, ça poserai problème même avec ifort non ?

    Je suis désolé de ne pas vous donner de réponse plus précise pour le moment, mais je travaille sur une machine à laquelle je n'ai pas accès tous les jours. Mais je vous donne plus d'infos très vite j'espère.

    En tout cas un grand merci pour votre aide à tous

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    Bon, j'ai vérifié, la déclaration de Param me semble correcte, et Nbp fait bien partie de Param et n'est pas un type contenant EQ

    Par contre, je viens de me dire que le point suivant à peut-être de l'importance :
    Param est déclaré dans un module.
    Du coup, y-a-til des conditions au moment de la compilation (du genre compiler le module avant de compiler le fichier, etc...)

    merci d'avance pour votre aide

  9. #9
    Membre habitué Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 192
    Points
    192
    Par défaut
    Bonjour

    Par contre, je viens de me dire que le point suivant à peut-être de l'importance :
    Param est déclaré dans un module.
    Du coup, y-a-til des conditions au moment de la compilation (du genre compiler le module avant de compiler le fichier, etc...)
    Oui bien sûr. Il faut impérativement compiler le module avant le (sous-)programme qui l'utilise et ajouter en début de ce (sous-)programme :


  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    merci pour cette réponse.
    il va falloir que j'en apprenne un peu plus sur la compilation en utilisant l'outil make pour savoir comment gérer l'ordre de compilation.
    En attendant je tenterai de faire ça à la main.

    Je suis désolé du temps de réponse, mais j'ai eu un gros soucis d'informatique. Pour le moment je ne peux plus accéder à la machine sur laquelle je compile (accès à distance).

    Je vous tiendrai au courant de l'avancement de mon problème.

  11. #11
    Membre habitué Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 192
    Points
    192
    Par défaut
    il va falloir que j'en apprenne un peu plus sur la compilation en utilisant l'outil make pour savoir comment gérer l'ordre de compilation.
    Je peux te fournir un exemple de make et quelques explications.

    Je suis désolé du temps de réponse, mais j'ai eu un gros soucis d'informatique. Pour le moment je ne peux plus accéder à la machine sur laquelle je compile (accès à distance).
    Aucun problème, j'ai tout mon temps.

Discussions similaires

  1. Compilation gcc avec upnp
    Par YuGiOhJCJ dans le forum C
    Réponses: 6
    Dernier message: 25/05/2010, 12h42
  2. Réponses: 6
    Dernier message: 16/11/2009, 01h02
  3. Simuler une POO avec des structures?
    Par MPEG4 dans le forum C
    Réponses: 10
    Dernier message: 21/07/2008, 13h35
  4. Probleme de compilation auto avec des projets svn
    Par gwendal86 dans le forum Eclipse
    Réponses: 0
    Dernier message: 18/04/2008, 21h21
  5. Probleme avec des structures
    Par lenectar dans le forum C
    Réponses: 17
    Dernier message: 30/12/2005, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo