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 :

[g95] Erreur "undefined reference"


Sujet :

Fortran

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Par défaut [g95] Erreur "undefined reference"
    Bonjour,
    bon, je programme en fortran, et j'utilise aussi g95 comme compilateur.

    Voici mon problème : il y a un bug, et je ne le comprends pas, malgré ce que je viens de lire sur ce forum.

    Module :
    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
    module euler12
    	contains
    		subroutine eul(f,m,xi,x0)!fonction à résoudre,parametre m,tableau de données de points généré,condition initiale
    		implicit none
    		real::f
    		real,intent(in)::x0
    		integer,intent(in)::m
    		real,dimension(:),intent(out)::xi
    		integer::i,j,k,l,n
    		real,dimension(:),allocatable::tn
    		allocate (tn(0:n))
    		tn=(/(8.*i/real(n),i=0,n)/)
    		xi(0)=x0
    		do i=0,n-1
    			xi(i+1)=xi(i)+f(xi(i),tn(i))/real(n)
    		enddo
    		deallocate (tn)
    		end subroutine eul
    end module
    Et voici le programme appelant :
    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
    23
    24
    program Edo1
    use euler12
    implicit none
    integer, parameter::m=5
    real,dimension(0:2**m)::res=0.
    real::t
    t=fxt(1.,1.)
    call eul(fxt,m,res,1.)
    print*,res
     
    contains
    function xt(t)
    real,intent(in)::t
    real::xt
    xt=exp(cos(t)-1)
    end function
     
    function fxt(x,t)
    real,intent(in)::x,t
    real::fxt
    fxt=-x*sin(t)
    end function
     
    end program
    Et voici le magnifique message d'erreur qui m'embête :
    g95 Edo1.f90 -o Edo1
    ./cciF2odJ.o:Edo1.f90:(.text+0x5b): undefined reference to `_euler12_MP_eul'
    >Exit code: 1
    J'ai pourtant compilé correctement le module avant de lancer le programme. Maintenant je ne vois pas pourquoi ça plante.
    Merci d'avance de vos réponses.
    Peace Oph

  2. #2
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    ton problème me semble simple, tu as bien compiler ton module mais tu n'a pas inclu le code compilé de la routine:

    le fichier .mod correspond un peut à un .h en C il dit seulement à ton prog principal que la fonction 'euler12_MP_eul' est défini ailleur et donc on ne s'en occuper pas à la compilation, par contre à l'édition de liens il faut l'inclure.

    pour compiler correctement ton programme (je te conseil d'ailleur d'utiliser un makefile surtout si tu rajoute d'autre module car cela devient vite pénible de taper les lignes de compilation à chaque fois) cela donne un truc comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    g95 -c euler12.f90
    g95 -c Edo1.f90
    ça c'est pour la compilation, (génère euler12.o et Edo1.o)
    pour l'édition de liens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g95 -o Edo1 Edo1.o euler12.o
    dans ce cas, on inclu dans l'éxecutable à la fois le code compilé du prog principal ET celui du module

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Par défaut
    merci bien^^'

    Après quelques essais, je compile comme ça maintenant:
    g95 edo1.f90 euler12.f90 -o edo1
    et ça marche correctement.

    Maitenant j'ai un autre problème, mais qui doit etre une curiosité du fortran...

    Quand je fais print*, res, il me sort les résultats avec une colonne de décalage...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/03/2009, 19h48
  2. Erreur compilation : undefine reference to '_
    Par Darksnakes dans le forum Débuter
    Réponses: 9
    Dernier message: 11/03/2009, 11h49
  3. Réponses: 2
    Dernier message: 27/03/2008, 16h57
  4. Erreur compilation "undefined reference to "
    Par ViRouF dans le forum C++
    Réponses: 5
    Dernier message: 02/03/2007, 14h55

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