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 :

Problème de recompilation avec l'interface


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 112
    Par défaut Problème de recompilation avec l'interface
    Bonjour,

    Voici mon problème: comme je voulais changer "beaucoup" mon code, j'ai enregistré mon "fichier1.f90" sous "fichier2.f90", et j'ai fait mes modifs dans le second fichier. Dans le premier source tout comme dans le second, j'utilise un module appelé interfaces1 (resp. interfaces2), où je mets toutes les interfaces de mes fonctions/sous-routines. Sauf que quand j'ai voulu compiler le fichier2, le compilateur reste bloqué sur le module interfaces1 (je le sais car, dans plusieurs fonctions, j'ai modifié le type d'un argument, et il me dit que le type ne correspond pas avec l'interface).

    Est-il possible qu'il ne crée pas mon module d'interfaces?

    J'espère que je vous ai donné toutes les infos nécessaires... merci d'avance!

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    je ne suis pas sûr d'avoir compris.

    tu essaies de faire une compilation avec les fichiers suivants:

    - fichier2.f90 (qui fait un use interfaces2 ?)
    - interfaces2.f90 (qui contient les interfaces des subroutines et fonctions de fichier2 ?)

    et tu obtiens un message d'erreur à la compilation qui te dit que le type et/ou le nombre d'arguments ne correspond pas ?

    si c'est le cas, c'est difficile de répondre à la question sans avoir le message d'erreur que tu obtiens à la compilation.

    ensuite, j'ai du mal à comprendre pourquoi tu as explicitement écrit des blocs interface dans ton module alors que l'un des gros avantages des modules en fortran90 est qu'ils génèrent automatiquement ces blocs interfaces.

    si j'ai bien compris l'organisation de ton projet, je te conseillerai plutôt de faire quelque chose comme ceci:

    - toutes tes fonctions et routines dans un fichier module (mod2) mod2.f90 par exemple.
    - le programme principal (et uniquement lui) dans le fichier2.f90 qui fait un
    use mod2.

    et dans ce cas là, tu n'a plus à expliciter les interfaces et tu auras aussi la vérification des prototypes d'appel à la compilation.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 112
    Par défaut
    Je vais essayer de faire ce que tu me dis. Mais dans ce cas (fichiers mod2.f90, fichier2.f90,...), il faut faire comment pour compiler ? Il y a une option de compilation ou il faut faire un makefile (la seconde solution me fait un peu peur...).

    Encore merci pour ta réponse!

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    j'avais peur du makefile aussi au début, mais après on se rend compte que c'est vraiment très pratique

    bien entendu tu peux faire sans (je mets gfortran parce que c'est mon compilateur):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gfortran -c mod2.f90 fichier2.f90
    gfortran -o toto *.o
    c'est tout

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 112
    Par défaut
    Les commandes que tu me proposes aboutissent aux mêmes erreurs. Il y en a 2, mais qui arrivent plusieurs fois:

    -tm6.f90:87.44:

    call donnees(nelem, nnoeu, nnint, x, elem, corr)
    1
    Error: Type mismatch in argument 'bord' at (1); passed INTEGER(4) to LOGICAL(4)

    -tm6.f90:105.42:

    call nabla(x, elem, q, nab_q, JFK, corr)
    1
    Error: More actual than formal arguments in procedure call at (1)

    Et ces erreurs surviennent justement dans les fonctions auxquelles j'ai changé les arguments (pour la 1ère erreur, l'argument bord était logical, maintenant il est entier, pour la seconde, il y a un argument de plus). Je ne comprends pas pourquoi il "garde en mémoire" les fonctions tapées dans le fichier1.f90?

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    ok,

    essaie en supprimant tous les fichiers .mod avant de faire la compilation.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 112
    Par défaut
    Citation Envoyé par kango Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gfortran -c mod2.f90 fichier2.f90
    gfortran -o toto *.o
    Salut!
    Je reviens sur ce sujet et plus particulièrement sur ton post. J'ai mis toutes mes fonctions dans le module "fonctions" (en n'oubliant pas le "contains" j'ai crû comprendre...) lui-même dans un fichier modfon.f90. J'ai enlevé toutes les interfaces de ces fonctions dans le fichier tm7.f90 et j'ai rajouté au début de "main": use fonctions. Ensuite j'ai tapé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gfortran -c modfon.f90 tm7.f90
    gfortran -o tm7 tm7.o
    La première ligne de code se passe bien (le fichier fonctions.mod est crée). La seconde m'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    tm7.o: In function `MAIN__':
    tm7.f90:(.text+0x181): undefined reference to `__fonctions_MOD_donnees'
    tm7.f90:(.text+0x176d): undefined reference to `__fonctions_MOD_detjfk'
    tm7.f90:(.text+0x1796): undefined reference to `__fonctions_MOD_matjfk'
    tm7.f90:(.text+0x1d21): undefined reference to `__fonctions_MOD_rigid'
    tm7.f90:(.text+0x1d4e): undefined reference to `__fonctions_MOD_membre_c'
    tm7.f90:(.text+0x1d66): undefined reference to `__fonctions_MOD_cholesky'
    tm7.f90:(.text+0x1da3): undefined reference to `__fonctions_MOD_nabla'
    tm7.f90:(.text+0x1de0): undefined reference to `__fonctions_MOD_nabla'
    tm7.f90:(.text+0x1e07): undefined reference to `__fonctions_MOD_construct_sol'
    tm7.f90:(.text+0x1e44): undefined reference to `__fonctions_MOD_nabla'
    tm7.f90:(.text+0x1eda): undefined reference to `__fonctions_MOD_eval_j'
    tm7.f90:(.text+0x1f9f): undefined reference to `__fonctions_MOD_mats'
    tm7.f90:(.text+0x1fc5): undefined reference to `__fonctions_MOD_memdroi'
    tm7.f90:(.text+0x1fe4): undefined reference to `__fonctions_MOD_solve_cholesky'
    tm7.f90:(.text+0x2021): undefined reference to `__fonctions_MOD_nabla'
    tm7.f90:(.text+0x206d): undefined reference to `__fonctions_MOD_minalphanr'
    tm7.f90:(.text+0x23d9): undefined reference to `__fonctions_MOD_nabla'
    tm7.f90:(.text+0x240a): undefined reference to `__fonctions_MOD_crit_arret'
    tm7.f90:(.text+0x2437): undefined reference to `__fonctions_MOD_crit_arret'
    tm7.f90:(.text+0x2555): undefined reference to `__fonctions_MOD_eval_j'
    collect2: ld returned 1 exit status
    Qu'est-ce que je fais de faux?

    Merci d'avance pour ta réponse!

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    tu as oublié de linker l'objet du module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gfortran -c modfon.f90 tm7.f90
    gfortran -o tm7 tm7.o
    essaie plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gfortran -c modfon.f90 tm7.f90
    gfortran -o tm7 tm7.o modfon.o

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JAXB] Problème pour unmarshaller avec une interface
    Par kase74 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 14/01/2013, 17h40
  2. [JTwain] problème de scan avec l'interface
    Par RR instinct dans le forum Multimédia
    Réponses: 2
    Dernier message: 21/12/2007, 12h05
  3. Problème avec deux interfaces
    Par ikeaboy dans le forum Langage
    Réponses: 2
    Dernier message: 28/05/2006, 14h56
  4. [EJB] Problème avec l'interface locale d'un bean
    Par clement42 dans le forum Java EE
    Réponses: 2
    Dernier message: 07/01/2006, 09h24
  5. Problème d'import avec l'interface sql server
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/08/2004, 16h00

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