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

Bibliothèques, systèmes et outils C Discussion :

Problème issu d'une conversion Fortran>C


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Problème issu d'une conversion Fortran>C
    Bonjour à tous,

    J'ai un code rédigé en Fortran que je dois retranscrire en C. Je travaille sous Windows Vista 32 bits.

    J'ai donc utilisé l'application F2C pour générer les fichiers sources du C.

    Maintenant, hélas, j'ai une erreur lors de l'édition des liens. A titre d'info j'utilise Microsoft Visual C++ 2010 Express.
    J'ai inclus dans un même projet les deux fichiers source du C (qui sont censés être compilés ensemble en Fortran), ainsi que le header f2c.h, et j'obtiens ceci en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1>------ Début de la génération : Projet : Nequick_F2C, Configuration : Debug Win32 ------
    1>  slQu.c
    1>  NeQuick_ITUR.c
    1>  Génération de code en cours...
    1>LINK : fatal error LNK1561: le point dentrée doit être défini
    ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    L'erreur LNK1561 semble-t-il, à l'édition des liens. J'ai déjà fait une recherche et d'autres ont eu ce numéro d'erreur, mais cela n'avait rien à voir avec une conversion Fortran>C, sauf confusion de ma part.

    J'ai l'impression qu'il faut rajouter des librairies mais je n'ai pas la moindre idée de celles qui conviennent.


    Merci pour tout renseignement.

    Cordialement.

  2. #2
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Salut,

    Tu as probablement oublié une lib. Cela dit, par expérience l'utilisation de f2c n'est pas vraiment adapté pour transcrire du fortran en C dans le sens ou code obtenu n'est pas trés exploitable en terme d'édition. Effectivement, le resultat de f2c peut normalement etre compilé avec un compilateur C mais pour le modifier ou le faire évoluer, la syntax est telle que c'est trés difficile et vraiment pas trés lisible. Si ton code n'est pas tres gros je te conseille de le transcrire à la main, le fortran en particulier si c'est du vieux tel que 77 est vraiment simple à traduire en C.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    1>LINK : fatal error LNK1561: le point dentrée doit être défini
    es-tu sûr d'avoir une fonction main()
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bonjour, merci de vos réponses,

    Citation Envoyé par uriotcea Voir le message
    Salut,

    Tu as probablement oublié une lib. Cela dit, par expérience l'utilisation de f2c n'est pas vraiment adapté pour transcrire du fortran en C dans le sens ou code obtenu n'est pas trés exploitable en terme d'édition. Effectivement, le resultat de f2c peut normalement etre compilé avec un compilateur C mais pour le modifier ou le faire évoluer, la syntax est telle que c'est trés difficile et vraiment pas trés lisible. Si ton code n'est pas tres gros je te conseille de le transcrire à la main, le fortran en particulier si c'est du vieux tel que 77 est vraiment simple à traduire en C.
    Alors déjà je vais préciser un peu le contexte.
    Effectivement c'est du Fortran77.

    En gros, mon travail consiste à débugger celui d'autres personnes s'étant déjà attaquées à la conversion de Fortran vers C.
    Celles-ci s'y sont prises à la main, mais il restait des bugs manifestes, car entre ce que nous sort le C et ce que nous sort le Fortran les erreurs n'étaient pas uniformes suivant les paramètres d'entrée et pouvaient dépasser 15% !

    Donc j'ai débuggé tant bien que mal tout le code déjà écrit en C, j'suis parvenu à réduire ces erreurs mais celles-ci étaient toujours un peu trop grandes pour mon encadrant.

    Je suis donc allé m'adresser à un autre professeur, qui m'a de suite suggéré F2C.
    On a essayé déjà sur l'environnement Ubuntu et alors là, ""miracle"", les résultats retournés par le C étaient identiques à ceux du Fortran à la 4ème décimale près !
    Quand j'en ai reparlé à mon encadrant, il a lui aussi approuvé cette solution.

    Maintenant le problème, c'est qu'il faut que je travaille sous Windows !


    Aussi, je souhaiterais savoir quelle librairie j'ai bien pu oublier. J'ai téléchargé le libf2C.zip sur ce lien : http://www.netlib.org/f2c/
    Mais je ne sais pas où il faut le mettre, ce qu'il faut garder, ou même s'il y en avait besoin, etc, etc.

    Citation Envoyé par diogene Voir le message
    es-tu sûr d'avoir une fonction main()
    Oui, je viens de regarder...

  5. #5
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Si son seul but, parfaitement honorable est d'avoir un code qui donne les même résultats qu'en f77, alors je ne comprend pas pourquoi tu ne laisses pas ce code en fortran. Le fait de devoir travailler sous windows n'empéche pas de compiler en fortran. Avec le suite GNU tu peux compiler le fortran et le C et le dialogue entre les 2 language est simple.
    j'ai récement eu un gros code ecrit en Fortran77 à faire évoluer. J'ai pris le partie de garder le fortran et à chaque fois que je voulais modifier une fonction en particulier je l'ai systématiquement ecrite en C, en linkant les 2 languages ensemble. Ainsi je fais lentement mais surtout surement evoluer ce code du fortran vers le C ou le C++aussi dailleurs.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Si son seul but, parfaitement honorable est d'avoir un code qui donne les même résultats qu'en f77, alors je ne comprend pas pourquoi tu ne laisses pas ce code en fortran
    Eh bien... le problème est que les fichiers sources du C issus du Fortran doivent s'intégrer dans la suite de mon travail dans un plus grand projet en C...
    J'ai d'autres fichiers sources "tout prêts" en C, pas encore utilisés, et le tout va s'imbriquer.

    Donc j'imagine que le fait que tout soit en C rend les choses plus aisées.

    De toute façon, je crois que je n'ai pas les compétences pour "linker" deux langages ensemble comme tu l'as fait, je n'ai reçu aucune initiation au Fortran lors de mon cursus... je me suis un peu formé sur le tas lors du premier débuggage dont je parlais (sur le code rédigé en C à la main), mais c'est tout.

    Et au sein de mon labo, je doute qu'ils acceptent un morceau de leur code écrit en Fortran, sachant que mes successeurs reprendront mon travail et qu'ils ne connaîtront probablement pas Fortran plus que moi.

    Bref, ce n'est pas négociable, c'est un code en C ou rien.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Le problème, c'est qu'en traduisant automatiquement du code Fortran en code C via des outils, dans le but de l'intégrer dans un projet, ça risque de devenir un peu usine à gaz. Et pour la maintenance, ça doit pas être terrible par la suite.
    Si la traduction "manuelle" provoque des incohérences dans le résultat, c'est que le code a mal été codé, qu'il y a des coquilles par endroits voire des bouts de code non portables pouvant avoir un comportement hasardeux. Un code C bien codé doit logiquement donner les mêmes résultats que le code Fortran.

    Ton code Fortran est-il long ? Les forumeurs peuvent toujours t'aider à le transformer en C (dans la mesure du possible).

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bonjour Jeroman,
    Citation Envoyé par jeroman Voir le message
    Si la traduction "manuelle" provoque des incohérences dans le résultat, c'est que le code a mal été codé, qu'il y a des coquilles par endroits voire des bouts de code non portables pouvant avoir un comportement hasardeux. Un code C bien codé doit logiquement donner les mêmes résultats que le code Fortran.
    Oui, hélas... ce n'est pas moi qui l'ai codé à la base. J'ai trouvé certaines coquilles dans le travail de mes prédécesseurs mais manifestement je ne suis pas parvenu à toutes les localiser car il subsiste toujours une erreur significative, bien que sensiblement réduite...

    Citation Envoyé par jeroman Voir le message
    Ton code Fortran est-il long ? Les forumeurs peuvent toujours t'aider à le transformer en C (dans la mesure du possible).
    Il est me semble-t-il assez long, enfin je me représente pas vraiment...
    En fait si certains ont la gentillesse d'essayer de m'aider, vous pouvez le trouver en téléchargement sur ce lien :
    http://www.itu.int/oth/R0A04000018/en

    Il y a un dossier nommé "R0A040000180001ZIPE" à décompresser une fois téléchargé.

    Je me sers des deux fichiers sources :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NeQuick_ITUR.for  slQu.for
    Tous les fichiers à l'extension .asc et .dat sont utilisés lors de la compilation, à l'exception de slQu.dat qui est le fichier de sortie, avec ces fameux résultats qui doivent être identiques de Fortran vers C.
    A ce propos, je crois qu'il y a un problème de casse, enfin moi je l'ai rencontré, c'est-à-dire qu'on obtient un dossier "R0A040000180001ZIPE" avec des noms de fichiers écrits par défaut en majuscules alors que ça ne compile qu'en minuscules... y compris pour les noms d'extension (c'est un peu fastidieux à changer, j'en suis désolé. )

    Bref, les deux fichiers sources que j'ai indiqués plus haut, c'est ceux que je souhaite compiler en Fortran, ce sont donc les deux que je convertis via F2C. Et cela marche très bien sous Ubuntu.

    J'espère ne pas être trop embrouillé dans mes explications.

    En tout cas, merci beaucoup par avance à qui s'attaquera à cette conversion de code, même s'il n'aboutit pas à quelque chose de concluant.

  9. #9
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Crois moi les developpers qui auront à reprendre l'ensemble préféreront de trés loin un bout de code en fortran plutot que la version C issue d'un f2c. Le premier est lisible, le second pas vraiment.

    Je te suggére cela:
    Puis que tu as les 2 versions l'une issue d'un f2c fonctionnant et l'autre issue d'une traduction à la main posant des probléme.
    Tu pourrais remplacer les fonctions de la version f2c progressivement par celles traduites manuellement jusqu'a que tu mettes la main sur celles qui posent probléme et ainsi situer plus précisément les erreurs.

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/05/2010, 13h04
  2. Réponses: 4
    Dernier message: 29/06/2009, 18h02
  3. Problème lors d'une conversion CString -> char*
    Par magicpm7 dans le forum C++
    Réponses: 11
    Dernier message: 28/08/2007, 12h44
  4. [MySQL] Problème de récupération de données issues d'une base
    Par ceaser dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/06/2007, 11h51
  5. Réponses: 1
    Dernier message: 01/02/2007, 19h38

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