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

C Discussion :

inclure du fortran dans du code C


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut inclure du fortran dans du code C
    Bonjour,
    J'ai un code C et un fichier .f contenant une fonction.
    Je voudrai apeler cette fonction dans un de mes .c
    En gros, faire un #include toto.f
    et pouvoir me servir de ce que contient ce code..

    Comment fait on ce genre de manip?

    mercii!

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Un compilateur c ne compile pas le code fortran.
    Tu vas être oliger de convertir ton code Fortran en c .
    Soit à la main soit automatiquement soit avec f2c.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    gcc est incapable de compiler du fortran ? ca m'étonne...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut
    En fait, je compile a part et j'ai donc mes .o de mes fichiers c et de mon fichier f.

    Donc la compile ne pose pas de probleme sauf erreur de ma part...

    C'est juste a l'appel de la fonction fortran dans mon code.
    Tu pense que la conversion est le seul moyen?

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Au temps pour moi !
    Regarde ici ça peut peut-être t'aider !
    http://www.starlink.rl.ac.uk/star/do...htx/node5.html

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: inclure du fortran dans du code C
    Citation Envoyé par vince3320
    J'ai un code C et un fichier .f contenant une fonction.
    Je voudrai apeler cette fonction dans un de mes .c
    En gros, faire un #include toto.f
    Ben non, un include sert généralement à inclure un fichier d'entête (.h) qui définii une interface. On ne peut pas inclure un fichier source d'un autre langage comme ça...
    et pouvoir me servir de ce que contient ce code..

    Comment fait on ce genre de manip?
    Il faut un compilateur fortran pour faire un fichier objet à partir de ton .f et avoir une documentation sérieuse concernant l'ABI (interface binaire) pour voir comment appeler un fonction de ce fichier objet à partir de C. Pas sûr que ce soit possible...

    Je pense qu'on augmente ses chances de réussite en utilisant la suite GCC (Gnu Compiler Collection) qui comprend, entre autres, un compilateur C et un compilateur Fortran, ainsi que la doc qui va avec...

    http://www.gnu.org/
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    Et en fesant une bibliothèque de ton fichier en fortran, il n'est pas possible d'appeler ensuite les fonctions à partir d'un programme en C :

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut
    C'est exactement ce que je pense faire!
    Mais le seul probleme est que je ne connais po le Fortran...
    Donc cela passe par virer les variables globales et enlever le truc qui sert de main dans le code en fortran.

    Une autre solution serait que dans mon code C, je fasse un apel system a mon exe de mon code en fortran (vu qu'il y a un main...) mais ce n'est pas possible car j'ai besoin de lui passer des parametres calcule via mon code C..
    A moins qu'un main Fortran puisse prendre des arguments..

    Bref, faut que je comprenne un peu le Fortran.

    Sinon, pour ce qui est d"apeler des fonctions Fortran dans un code C,
    je pense savoir comment faire donc je le posterai des que cela marchera !!

    Merci bien!

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par vince3320
    C'est exactement ce que je pense faire!
    8)

    Citation Envoyé par vince3320
    j'ai besoin de lui passer des parametres calcule via mon code C..
    A moins qu'un main Fortran puisse prendre des arguments..

    Bref, faut que je comprenne un peu le Fortran.
    Je pense que c'est possible de récupérer les arguments de la ligne de commande.
    Forum Fortran...!

  10. #10
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut,

    appeler une fonction (ou une routine) FORTRAN en C est possible, mais ce n'est pas trivial. Apparemment, tu as compile ta routine FORTRAN et tu as un routine_fortran.o qui correspond a ton routine_fortran.f. Evidemment, il n'est pas possible d'appeler le "main" du programme fortran depuis le C, puisque ce n'est pas une fonction (contrairement au C).

    Donc supposons que ton routine_fortran.f est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SUBROUTINE toto( a, b, c)
    IMPLICIT NONE
    REAL a
    REAL b
    INTEGER c
    ...
    Tu dois ecrire le prototype C de cette fonction. Il faut juste se souvenir que le passage de parametre en Fortran se fait TOUJOURS par l'adresse de la variable. Donc ton routine_fortran.h contiendra:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void toto (float *a, float *b, int *c)
    Tu inclus cet headerfile, et tu compiles ton objet c. Tu dois faire ensuite un Makefile pour lier les deux objets. Ici, ca depend de ton systeme : il est possible que le compilateur Fortran rajoute une decoration sur le nom de la routine, genre toto devient toto_. C'est assez facile a prendre en compte dans le headerfile C.
    Il faut egalement ajouter une bibliotheque lors de l'edition de lien. Si tu es sous HP-UX, il faut rajouter le flag -lcl. Sous linux, c'est -lg2c. Sous AIX, c'est -lf2c si je me souviens bien.

    Une derniere chose, passer des tableaux de plusieurs dimensions est un cauchemar. En effet, Fortran et C ne stockent pas les tableaux en memoire de la meme facon (l'un stocke les tableaux colonne par colonne, l'autre ligne par ligne). Donc pour eviter de t'epuiser, linearise tes tableaux a plusieurs dimensions !

    En esperant que cela t'aide !

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Juste par curiosité: Elle fait quoi ta fonction en Fortran ?

  12. #12
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    question bete : pourquoi il y a encore des gens qui codent en FORTRAN ????

  13. #13
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par mtopoloff
    question bete : pourquoi il y a encore des gens qui codent en FORTRAN ????
    Y en a bien qui codent en cobol

  14. #14
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 67
    Points : 108
    Points
    108
    Par défaut
    Dans un cas comme dans l'autre, il s'agit souvent de maintenir des applications existantes pour lesquelles les entreprises n'ont pas les moyens et/ou la volonté d'investir dans un portage ou la réecriture dans un autre langage.

  15. #15
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par mtopoloff
    question bete : pourquoi il y a encore des gens qui codent en FORTRAN ????
    Il faut se mefier du "jeunisme" en informatique ! La "vieillesse" d'un langage a plusieurs avantages, notamment :
    - disponibilite de nombreuses routines verifiees depuis longtemps, que l'on peut utiliser comme des boites noires avec confiance
    - un compilateur efficace et optimise

    Le Fortran est utilise principalement dans les applications de calcul scientifique, ou l'important est la confiance en les resultats du programme. Les performances pures ne viennent qu'apres. Ceci dit, je peux te dire qu'un programme en Fortran parallelise tournant sur un NEC SX6, eh bien, ca tourne plus que bien !

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

Discussions similaires

  1. inclure des balises dans du code php
    Par jfbidul dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/08/2012, 13h14
  2. inclure du PHP dans du code HTML
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2010, 17h48
  3. Réponses: 2
    Dernier message: 20/05/2009, 11h41
  4. Appel Fortran dans un code en C
    Par pdufranc dans le forum Fortran
    Réponses: 0
    Dernier message: 05/02/2009, 18h59

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