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 :

Link avec du C (multiple main)


Sujet :

Fortran

  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 Link avec du C (multiple main)
    Bonjour!

    Voila j'ai un code C qui appelle du fortran.
    Mon main est en C et je compile avec g95 (parce que je n'arrive pas a installer g77 sur ma mandrake.....)
    Quand je compile tout ca, il me dit :
    src/run_prospect.c:40: multiple definition of `main'
    Apres avoir consulte mon ami google, j'ai appris qu'il y avait un main qqpart dans les libs fortran et que c'est de la que vient le conflit.
    Par contre, je ne trouve pas de solution a mon probleme...
    Quelqu'un a une idee?

    Merci!

  2. #2
    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
    Un main() dans les bibliotheques Fortran standards ? M'etonnerait beaucoup... Meme si une fonction ou une subroutine Fortran s'appelait main, cela n'entrainerait pas de collision avec le main() du C (g95 decore le nom des routines Fortran, par defaut).
    D'apres l'erreur que tu postes, c'est ton fichier C qui ne compile pas. Il y a certainement une erreur dedans (deux fonctions main ou une erreur de syntaxe, par exemple)... Evidemment, si tu as appele une de tes fonctions Fortran main, alors, c'est que tu cherches les ennuis...

  3. #3
    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
    D'apres l'erreur que tu postes, c'est ton fichier C qui ne compile pas.
    En effet...

    Il y a certainement une erreur dedans (deux fonctions main ou une erreur de syntaxe, par exemple)... Evidemment, si tu as appele une de tes fonctions Fortran main, alors, c'est que tu cherches les ennuis...
    Non.

    http://info.nccs.gov/resources/jagua...e_to_main_mean

    Cela résume a peu près mon probleme.
    Mais la solution proposé n'est pas la bonne.
    Je vais continuer a chercher.
    Merci

  4. #4
    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 vince3320
    Mais la solution proposé n'est pas la bonne.
    J'avoue que j'ignorais que pgf90 inclut une fonction main. C'est idiot de leur part. Ceci dit, pourquoi la solution proposee ne resout pas ton probleme ? Tu as bien ajoute -Mnomain aux options de pgf90 (pour tous les fichiers fortran que tu compiles) ? Tu utilises bien pgf90 pour compiler le code fortran?

  5. #5
    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
    Ben le probleme est que je n'utilise pas pg90 mais g95.
    Du coup, l'option -Mnomain n'existe pas...
    Pourtant j'ai bien le meme probleme que celui la.
    Dans d'autres forum, il parle de remplacer le main en F77_MAIN mais du coup, ca n'appelle plus mon main(logique) et le lancement du programme ne fait rien...

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Un wild guess...

    Il est assez facile en Fortran de créer accidentellement un main en insérant par erreur un « end » au milieu d'une procédure parce que le mot-clé « program » est facultatif. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    subroutine Test
    write(*,*) 'sub test'
    end
    write(*,*) 'main !!!'
    end
    Peut-être est-ce la cause...

  7. #7
    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
    Idée sympathique! mais ce n'est pas le cas.

    En fait, je me suis debrouille a linker avec gcc a la place de g95 en creant un exe fortran a cote.
    C'est une solution qui resoud mon probleme mais j'aimerai quand meme comprendre...

  8. #8
    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 vince3320
    En fait, je me suis debrouille a linker avec gcc a la place de g95 en creant un exe fortran a cote
    Ah, on avance ! Si ton programmes C contient le main(), alors tu dois linker avec gcc. Si c'est ton programme Fortran qui contient le point d'entrée principal (program), alors tu dois linker avec g95.
    En résumé, on compile les .c avec gcc, les .f[90] avec g95, et on fait le lien via le front-end qui correspond au langage qui donne le point d'entrée.

  9. #9
    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
    Oui tu as raison, j'ai fais une erreur a ce niveau la.
    Merci pour ton explication!!

    C'est quoi un front-end?

  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
    Citation Envoyé par vince3320
    C'est quoi un front-end?
    Pardon, ce n'etait pas tres clair. Le front-end, c'est la partie d'un compilateur qui depend du langage. Par exemple, la GNU Compiler Collection (GCC) comprend des front-end pour le C, C++, Objective-C (c'est gcc avec diverses options), Fortran (gfortran), Java (GCJ) et Ada (GNAT). Typiquement, un front-end traduit le langage de programmation en langage intermediaire (GIMPLE pour GCC, je crois) . De cette facon, le coeur du compilateur est independant du langage d'origine (et de la machine cible, puisqu'il y a un back-end de l'autre cote pour faire la traduction langage intermediaire -> code objet).

  11. #11
    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
    J'en avais jamais entendu parler!
    Merci encore pour l'aide et les explications!

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

Discussions similaires

  1. probleme de link avec visual studio .net 2003
    Par kamal101 dans le forum MFC
    Réponses: 9
    Dernier message: 28/03/2005, 21h44
  2. erreur link avec Builder C++
    Par axxel dans le forum DirectX
    Réponses: 8
    Dernier message: 20/07/2004, 02h58
  3. [VB6]Prob avec les requêtes multiples
    Par cammipascal dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 30/03/2004, 18h46
  4. Problème de link avec Borland C++ 5.5
    Par gelam dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 24/11/2003, 16h45
  5. pb de link avec direct X 8.1
    Par amaury pouly dans le forum DirectX
    Réponses: 2
    Dernier message: 01/04/2003, 08h04

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