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 :

Erreur lors de compilation avec une bibliothèque externe


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Erreur lors de compilation avec une bibliothèque externe
    bonjour tout le monde,
    Je suis débutant sur l'utilisation des bibliothèques externes avec fortran, en effet j'ai une bibliothèque nommé lib_vtk_io, ou j'ai effectué sa compilation avec le mpif90. et donc j'ai obtenu deux dossiers: un pour les mod et un pour le fichier lib_vtk_io.a, alors j'ai essayé de crée un 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
    15
    16
    17
    18
    19
    20
    21
     
    #VTK_IO_LIB path
    VTK_Path =./utility/vtkio
    #VTK_LIB
    lib_vtk=-I$(VTK_Path)/mod $(VTK_Path)/static/lib_VTK_IO.a
     
    # Compiler
    FC        = mpif90
    FFLAGS    =
    LDFLAGS   =-Wl,-V
    LIB       =$(lib_vtk) 
    # ------ No machine-specific paths/variables after this  -----
     
    FSOURCE = LBMF.f90
    OBJECTS = LBMF.o 
     
    LBMF: LBMF.f90 
    	$(FC) -o $@ $(LDFLAGS) LBMF.f90 $(LIB)
    	touch $*.o $*.mod
    clean:
    	rm -f $(FSOURCE) %.o
    Lors de compilation l'erreur qui s'affiche est :
    collect2: error: ld returned 1 exit status
    make: *** [LBMF] Error 1

    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Il ne faut pas confondre l'option de compilation '-I' qui indique le chemin à suivre pour trouver les modules et l'option '-L/chemin/vers/la/librairie -llibrairie' qui indique où est la librairie.

    Pour faire simple, et sans s'encombrer de la surcouche makefile. Si tu as des modules dans /chemin/vers/modules et une librairie 'libmalib.a' dans /chemin/vers/ma/librairie, alors la compilation du programme 'monprog.f90' avec le compilateur 'gfortran' se fera comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gfortran monprog.f90 -I/chemin/vers/modules -L/chemin/vers/ma/librairie -lmalib -o monprog

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merçi pour votre réponse
    J'ai testé une compilation par commande dans le terminal,la phase de compilation passe sans erreur, mais malheureusement le problème apparaît lors de phase de linking,voila ce que j'ai comme erreur:
    LBMF.o: In function `MAIN__':
    LBMF.f90:(.text+0x1b7b6): undefined reference to ....
    collect2: error: ld returned 1 exit status

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Citation Envoyé par Nouri.Mdafer Voir le message
    LBMF.f90:(.text+0x1b7b6): undefined reference to ....
    Le message d'erreur ne contient que cette information?
    Normalement au lieu des "...." il devrait y avoir le nom de la routine ou fonction appelée depuis ton code, mais qui n'est pas trouvée par le compilateur (soit parce que le chemin vers la librairie n'est pas bon, soit parce que cette routine/fonction n'existe effectivement pas).

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Points : 110
    Points
    110
    Par défaut
    Bonjour tout le monde,

    Je rencontre un problème similaire et j'aurai aimé savoir si vous avez trouvé la solution. J'utilise la librairie netcdf. Dans un terminal les lignes de commande suivantes fonctionnent sans problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -ncdump  -h phys.nc ! lecture de l'entête
    -ncdump -v salinity,temperature -p 3 phys.nc ! lectures des variables salinity et temperature
    Lorsque je cherche à intégrer ces commandes dans un programme comme ci-dessous, ça ne fonctionne plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          Program scdstep
          implicit none
          include 'netcdf.inc'   
     
          character*(*) FILE_NAME
          parameter (FILE_NAME='phys.nc')
    c     on cherche à recuperer l'entête
          call ncdump ('-h',FILE_NAME) 
          end program scdstep
    Je compile mon exemple avec la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gfortran -I/usr/include -L/usr/lib/x86_64-linux-gnu scdstep.f -o scdstep.exe
    et j'obtiens l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /tmp/ccLk8uc0.o: In function `MAIN__':
    scdstep.f:(.text+0x1e): undefined reference to `ncdump_'
    collect2: error: ld returned 1 exit status
    Voilà, espérant une aide de votre part (Je précise que je suis débutant)

    Merci d'avance

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    'ncdump' est un exécutable, pas une fonction/routine de la librairie netcdf.
    Si tu veux lire/écrire un fichier netcdf, il faut utiliser les routines adéquates (c.f. la documentation de la librairie).

    Et d'autre part, je répète ce que j'ai mis plus haut, pour la commande de compilation, il faut préciser le chemin vers la librairie via '-L' ET la librairie via l'option '-l', avec la subtilité suivante: pour indiquer la librarie "libmachin.a" on utilise '-lmachin' (le préfixe 'lib' est ajouté par le compilateur; et le suffixe '.a' ou .'so' est ajouté par le compilateur).
    Pour reprendre ton exemple, avec la librairie libnetcdf.a se situant dans le répertoire '/usr/lib/x86_64-linux-gnu':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gfortran -I/usr/include -L/usr/lib/x86_64-linux-gnu -lnetcdf scdstep.f -o scdstep.exe

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Points : 110
    Points
    110
    Par défaut
    Merci Ehouarn,

    Tout est rentré dans l'ordre, et ça fonctionne correctement!

    @++

Discussions similaires

  1. Liaison avec une bibliothèque externe
    Par gpcbitnik38 dans le forum Qt Creator
    Réponses: 2
    Dernier message: 20/09/2014, 16h28
  2. erreur lors de compilation avec ld
    Par asphalte dans le forum C++
    Réponses: 7
    Dernier message: 20/05/2008, 14h12
  3. message d'erreur lors d'ouverture d'une bibliothéque
    Par hbennou dans le forum SharePoint
    Réponses: 0
    Dernier message: 08/05/2008, 20h33
  4. Pb de surlignage lors de compilation avec erreur
    Par cgone dans le forum Delphi
    Réponses: 4
    Dernier message: 07/11/2006, 15h38

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