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 :

Edition de lien avec lapack


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 109
    Par défaut Edition de lien avec lapack
    Bonjour,

    Je cherche à utiliser la librairie lapack dans mon code fortran.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $(EXEC):$(OBJ)
    		$(FL) $(OBJ) $(OBJ_EXT) LAPACKd.lib -lg2c -o $(EXEC)
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FL=gfortran -g -o -ffree-line-length-none
    Le programme trouve bien la librairie Lapackd (pour le mode debug) car si je fais une erreur dans le nom de la librairie, il y a une erreur lors de l'exécution du makefile.

    Pourtant lors de l'édition de liens j'ai les erreurs suivantes :
    ../libPROPEM/decomp.o:decomp.f:(.text+0x298): undefined reference to `zgesvd_'
    ../libPROPEM/decomp.o:decomp.f:(.text+0x86e): undefined reference to `zgetrf_'
    ../libPROPEM/decomp.o:decomp.f:(.text+0x927): undefined reference to `zgetri_'
    ../libPROPEM/decomp.o:decomp.f:(.text+0xd7f): undefined reference to `zgees_'
    ../libPROPEM/decomp.o:decomp.f:(.text+0x12b2): undefined reference to `zgels_'
    zgesvd etc... sont des routines de lapack (il y a un fichier zgesvd.f par exemple). Est ce qu'il pourrait y avoir un problème lors de l'installation de la librairie lapack qui omettrait certains fichiers (ca me paraît étonnant mais je ne vois pas d'autres explications...) ?

    [EDIT]
    Pour la compilation je passe apr MinGW.

    Est ce que ca pourrait venir du fait que le fichier est un fichier.lib alors que les librairies sont des fichiers .a ? Est ce que quelqu'un sait où je peux trouver liblapack.a pour utiliser avec CygWin

    [/EDIT]

    Merci pour votre aide
    François

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Par défaut
    Bonjour,

    sous Cygwin (ou Linux) ce genre d'erreur signifie qu'il ne trouve pas tes subroutines fortran (attention à l'underscore!). Vu que tu es sous Windows, je ne suis pas sûr de savoir comment résoudre ton problème.

    Par ailleurs, tu peux trouver la bibliothèque Lapack sur Netlib.org: http://www.netlib.org/lapack/

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    La librairie Lapack est fournie avec Cygwin; tu devrais pouvoir l'obtenir simplement en cochant la bonne case de l'installeur.
    Mais sinon tu peux également la récupérer sur Netlib et la recompiler sous Cygwin toi-même. Je l'ai fait il y a quelques années, en utilisant g77, et de mémoire c'était assez direct, mis à part le fait qu'il est préférable d'installer au préalable la librairie Atlas(Blas). J'ai même gardé quelques traces de la procédure ici, si ça peut t'être utile ...

    Sinon, il peut effectivement se poser le problème complémentaire des underscores supplémentaires que rajoutent certains compilateurs aux routines. Sous Unix/Linux/Cygwin, tu as la commande 'nm' qui te permet de vérifier les noms des routines archivées dans la librairie; donc:
    te permettra de voir ce qu'il en est.

    Ehouarn

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 109
    Par défaut
    Merci de vos réponses.

    Je suis passé entièrement sous CygWin.

    sur la librairie lapack_linux.a j'ai fait un nm (j'ai trouvé cette librairie directement compilée). Cela m'a retourné

    zgesvd.o:
    U dlamch_
    U dlascl_
    00000000 t gcc2_compiled.
    U ilaenv_
    U lsame_
    U s_cat
    U sqrt
    U xerbla_
    U zbdsqr_
    U zgebrd_
    U zgelqf_
    U zgemm_
    U zgeqrf_
    00000000 T zgesvd_
    U zlacpy_
    U zlange_
    U zlascl_
    U zlaset_
    U zungbr_
    U zunglq_
    U zungqr_
    U zunmbr_

    Donc à priori la routine zgesvd_ existe bien dans ma librairie non ? Si oui cela veut dire que c'est ma ligne de commande pour l'édition de lien qui est fausse.

    ma ligne de commande pour linker la librairie est :
    gfortran -g -o obj1.o ... objN.o lapack_linux.a -lg2c -o Executable.

    Qu'en pensez vous ?

    Je vais quand même essayer de recompiler lapack au cas où

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 109
    Par défaut
    J'ai installé g77, lapack etc... par l'intermédiaire du Setup.exe de Cygwin.
    Du coup plus rien ne compilait avec mon makefile

    j'ai du utiliser gfortran au lieu de gcc pour compiler mais il ne reconnait plus le -lg2c

    [EDIT]
    il fallait ajouter -L /usr/lib/gcc/i686-pc-cygwin/3.4.4 car gfortran ne connaissait pas le path
    Par contre j'ai les erreurs suivantes :

    /usr/lib/gcc/i686-pc-cygwin/3.4.4/libg2c.a(wsne.o).text+0xc4): undefined reference to `___errno'
    De même avec `___imp___ctype_'

    sur mes modules j'ai ca avec `___powidf2'

    [/EDIT]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 109
    Par défaut
    La solution de ce problème :

    Je suis resté sous MinGW. La librairie utilisée pour effectuée le lien avec lapack n'était pas la bonne. Du coup j'ai utilisée celle fournie avec CygWin.

    La bonne ligne de commande pour linker la librairie est :

    $(EXEC):$(OBJ)
    $(FL) $(OBJ) $(OBJ_EXT) -LC:\cygwin\lib -llapack -lg2c -o $(EXEC)

    Merci pour votre aide .

    A++

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

Discussions similaires

  1. Edition de lien avec option 32bits
    Par yann_m dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 06/02/2008, 11h06
  2. Edition de lien avec QT4
    Par uriotcea dans le forum C++Builder
    Réponses: 0
    Dernier message: 09/01/2008, 16h53
  3. edition de lien avec librairie statique
    Par vision_opencv dans le forum Linux
    Réponses: 3
    Dernier message: 06/08/2007, 01h09
  4. Réponses: 11
    Dernier message: 20/01/2006, 12h35

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