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 :

Linker du Fortran 90 et du Fortran 77


Sujet :

Fortran

  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 Linker du Fortran 90 et du Fortran 77
    Bonjour,

    Je suis actuellement en train de développer un code en fortran90. Je dois linker ce code avec des fichiers objets issus d'un code fortran77 dont je n'ai pas toutes les sources. Est ce que vous savez si cette manip est possible ? (Je travaille sous visual studio).

    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,

    oui c'est possible. Même si tu n'as pas les sources, du moment que tu as les symboles (les noms des subroutines ou des variables) tu peux le faire. Après sous Visual Studio, je ne sais pas.

    Edit: en plus des noms des subroutines, il te faudrait la déclaration entière des subroutines (les arguments...)

  3. #3
    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
    ok merci TheOyoStyledMan.
    je vais voir comment faire ca

  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
    En fait il s'avère que visual studio et lrd objets que j'ai a disposition ne sont pas compilés par le même compilateur. Du coup je dois compiler mon logiciel avec gcc.

    Est ce que quelqu'un aurait un exemple de makefile pour fortran ?

    Merci pour votre aide.
    François

  5. #5
    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
    y a la version basique de makefile genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #section d'édition de liens
    prog:toto.o
            gcc -o prog toto.o
     
    #section de précompilation:
    precomp: toto.f90
            gcc -E toto.f90
     
    #section de compilation
    toto.o:precomp
            gcc -c toto.f90
    ensuite tu peux rajouter des variable:

    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
     
    FC=gcc -c #compilateur
    FL=gcc -o  #éditeur de lien
    FP=gcc -E  #préprocesseur
    CFlag= -O3 #options de compilation
    LFlag=        #Options d'édition de liens
    EXEC= prog
    OBJ= toto.o
     
    $(EXEC):$(OBJ)
           $(FL) $(EXEC) $(OBJ) $(LFlag)
     
    Pre:toto.f90
           $(FP) toto.f90
     
    toto.o:Pre
           $(FC) toto.f90  $(CFlag)
    par exemple et dans les flag, tu rajoute le repertoir où il y a tes modules...

  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
    Merci genteur slayer

  7. #7
    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
    Encore une question (décidément...)

    J'utilise gcc pour compiler (il provient de MinGW). Lorsque j'utilise gcc, fait il appel automatiquement à g77 ? (qui d'après ce qu'on m'a dit est équivalent à f77 utilisé pour compiler mes objets dont je n'ai pas les sources...)

    [EDIT] Avec gcc l'édition de lien ne marche pas. J'ai lu sur le net qu'il faut utiliser gfortran mais j'ai peur que ca ne soit pas compatible avec f77. Le makefile précédent, en utilisant g77 comme compiler, ne marche pas et donne l'erreur suivante :
    linker input file unused because linking not done
    Lorsque j'essayer juste de compiler un objet avec g77 j'obtiens l'erreur suivante :
    C:\SYREN\source\FORTRAN\Module2\src>g77 -O lapack.f90
    c:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe:lapack.f90:
    file format not recognized; treating as linker script
    c:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe:lapack.f90:
    1: syntax error
    collect2: ld returned 1 exit status
    Je suis un peu paumé... quelqu'un pourrait m'aider ?
    [/EDIT]

    Merci
    François

  8. #8
    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,

    Visiblement tu cherches à compiler des sources en fortran 90:
    C:\SYREN\source\FORTRAN\Module2\src>g77 -O lapack.f90
    g77, comme son nom l'indique, ne gère que du Fortran 77.
    Si tu lis bien les messages d'erreurs, ils t'expliquent que g77 ne reconnait pas le format du fichier 'lapack.f90' et du coup décrète que c'est un 'linker script', d'où le 'syntaxe error' lorsqu'il tente de l'exécuter en tant que tel.

    Il faut absolument que tu utilises 'gfortran' (ou éventuellement 'g95') pour compiler.

    Ehouarn

  9. #9
    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
    Ok merci.

    J'ai utilisé gcc pour la compilation des .o et gfortran pour le lien entre les .o et les .o compilés que j'ai eu compilé en f77 et l'édition de lien se passe correctement.

    Merci à tous pour votre aide.

  10. #10
    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
    Je voulais juste modéré ma réponse. En effet en faisant un nm sur les objets compilés avec g77 dont je n'ai pas les sources il y avait des noms de routines tels que

    _maRoutine_ et _maRoutine__ (un deuxième underscore sur la deuxième). Je ne sais pas pourquoi sur certaines routines il y a deuxième underscore.

    Pour appeler le premier type, il n'y a aucun problème.
    Pour appeler le deuxième type, il faut faire appel dans son code à maRoutine_ (et donc rajouter un underscore).

    En espérant que ca servira à d'autres

    A++

  11. #11
    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,

    Par défaut, les compilateurs g77, gfortran et g95 ajoutent un underscore en début et fin des nom des objets, mais en plus, si le nom de la routine ou du programme contient déjà un underscore alors deux underscores sont mis.
    Une routine "maroutine" donnera un objet nommé "maroutine_" et une routine "ma_routine" donnera un objet nommé "ma_routine__".
    Mais il y a des options de compilations pour gérer les conventions de la mise ou non d'un deuxième underscore: l'option -fno-second-underscore (sinon par défaut, c'est -fsecond-underscore qui est considérée).

    Il y a de même les options -fleading-underscore pour imposer l'ajout d'un underscore en début de nom et l'option -funderscoring ou -fno-underscoring pour imposer l'ajout ou non d'un underscore en fin de nom.

    Il est évidemment préférable (c'est bien plus propre et pratique que de changer les noms d'appels des routines dans les codes) d'utiliser ces options quand on dois combiner des objets de sources diverses comme tu le fais.

    Ehouarn

  12. #12
    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
    Effectivement dans le nom de la routine il y a un underscore.

    Le problème c'est que je ne peux pas recompiler les objets en fortran 77 car je n'ai pas les sources. Donc je ne peux pas enlever le deuxième underscore de mes objets compilés avec g77.

    Par contre sous gcc je peux peut être mettre une option de compilation pour en rajouter un. Je vais regarder si l'option -funderscoring existe sous gcc ou s'il y a son équivalent.

    Merci Ehouarn

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

Discussions similaires

  1. Problème en interfacant C et Fortran
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 23/05/2006, 16h10
  2. Compilateur Fortran
    Par badrou dans le forum Fortran
    Réponses: 3
    Dernier message: 28/11/2004, 20h39
  3. accès fortran à une base / utilisation des "bytea"
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/11/2004, 08h31
  4. Simulateur fortran
    Par kaczmarek dans le forum Linux
    Réponses: 1
    Dernier message: 28/07/2004, 17h55
  5. [TP]Portage d'un encodeur MP3 Fortran en pur Pascal...
    Par Christophe Fantoni dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 04/07/2003, 17h34

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