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 dépendances dans une subroutine dans un module


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Par défaut Problème de dépendances dans une subroutine dans un module
    Bonjour à tous,

    je débute en fortran et je dois reprendre des programmes existants pour les modifier.

    J'ai un programme principal en .f90 et plein de modules en .f90 aussi.

    Sous Visual Compaq Fortran, j'avais des erreur de LINK quand je compilais le projet, alors que chaque module se compile séparément.
    Je suis passée sous Linux sous gfortran car je ne comprenais rien aux erreurs de cet IDE.
    Puis j'ai testé avec seulement 2 modules et un programme test :

    J'ai un fichier "test.f90" qui utilise les modules kinds et sparsem, respectivement dans "module_kinds.f90" et "module_sparsem.f90".
    Mais le module sparsem utilise le module kinds donc j'ai d'abord compilé kinds :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfortran -c  module_kinds.f90
    Ce qui a marché et a crée le "kinds.mod"et "module_kinds.o", puis j'ai compilé sparsem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfortran -c module_sparsem.f90
    Ce qui a marché et a crée le "sparsem.mod" et "module_sparsem.o", cependant quand je veux créer l'executable test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfortran test.f90 module_kinds.o module_sparsem.o -o test
    J'ai plein d'erreurs du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    module_sparsem.o: In function `__sparsem_MOD_get_sparse_hashm':
    module_sparsem.f90:(.text+0x8046): undefined reference to `hashvr_'
    collect2: ld returned 1 exit status
    Or je me suis rendue compte que les subroutines ou interfaces des fonctions qui sont indéfinies font appel au module kinds, mais je ne sais pas comment régler ce problème.

    J'ai compris d'où venait le problème je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    module sparsem
    use kinds
    implicit none
     
     interface    !external function
          function hashvr(dat,r,ind,m,n,mode,nr)  <== cette fonction n'est pas définie
          use kinds           <== pas pris en compte mais pourquoi?
          integer ::hashvr,r,mode,nr,m,n
          real (rh)::ind(:,:),dat(r)
          end function
      end interface
     
    endmodule
    J'ai donc passé la journée à faire des Makefile (j'en avait jamais fait) pour essayer de régler les problèmes de dépendances, mais je dois mal m'y prendre car j'ai toujours les mêmes erreurs.

    Je vous post un de mes Makefile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FC = gfortran
    FFLAGS =
    LDFLAGS =
     
    prog :module_kinds.o module_sparsem.o test_sparsem.o
        gfortran -o prog module_kinds.o module_sparsem.o test_sparsem.o
    module_kinds.o :
        gfortran -c module_kinds.f90
    module_sparsem.o : module_kinds.o    
        gfortran -c module_sparsem.f90
    test_sparsem.o : module_kinds.o module_sparsem.o
        gfortran -c test_sparsem.f90
    clean :
        rm -f *.o *.mod prog
    Voilà, ça fait 2 jours que je coince là-dessus alors si vous avez ne serait-ce qu'une petite idée, n'hésitez pas.

    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 79
    Par défaut Sparsem
    Es tu sûre que ton module sparsem se compile bien ?
    J'utilise une librairie qui porte le même nom (par I Miztal) et la création du module des matrices creuses nécessite de compiler un grand nombre de fichiers sources (dont un appelé sparse2.f, contenant une fonction hashvr).

    La méthode à suivre pour mieux comprendre d'où vient ton problème est de bien suivre les différents appels aux sous routines de ton programme et de vérifier à chaque fois où (quel fichier de code source) se situent ces dernières et si tu as bien compilé ce code source.

    Un autre problème classique peut être l'ordre des compilations (mais si tu ne fait pas de make clean entre plusieurs tentatives de compilation, il n'y a pas de raison que ce soit ton problème ici).

    En tout cas vérifies bien tes appels et fais signe si besoin est !

    Bon courage.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Par défaut
    Bonjour,

    merci yogitetradim pour ton aide.

    Mon module sparsem se compile bien tout seul (après avoir compilé kinds) car il n'utilise normalement que le module kinds. Normalement le contenu de ce module est le même que celui de la librairie du même nom, mais mon responsable préfère que je n'utilise pas de librairie. J'ai donc les modules "lapack90" (avec d'autres module comme "dblas" dedans),"kinds", "sparsem", "sparseop","denseop", "texteop" et "pcg".

    Pourrais-tu m'indiquer où tu trouves ces librairies et comment on doit les "installer" ou "compiler" je ne sais pas trop. Je pense que ce serait quand même plus pratique, en plus les routines que j'ai datent pas mal...

    Sinon je vais en effet suivre ton conseil et détailler tous les appels de mes différents modules, mais sparsem est le seul qui n'utilise que kinds, je me demande s'il ne me manquerait pas ce sparse2.f dont tu m'as parlé.

Discussions similaires

  1. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  2. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  3. Problème d'affichage d'une image dans une fenetre
    Par taouja dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 30/04/2007, 16h00
  4. [C#] Problème d'ajout d'une ligne dans une DataTable
    Par therock dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/11/2006, 08h27
  5. Problème d'insertion d'une table dans une autre
    Par capitaine dans le forum Access
    Réponses: 5
    Dernier message: 26/09/2006, 16h44

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