Bibliothèque Fortran

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 5 avril 2012 à 11:52
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 5 avril 2012 à 18:39
Bonjour,

Je cherche à faire évoluer une bibliothèque fortran compilé avec un vieuuuuuuxxxxx compilateur afin de l'intégré dans Visual Studio 2010 (en utilisant "Intel Visual Fortran Composer XE 2011.7.258").

Les link ne fonctionne pas (pour aucune des fonctions Fortran et je n'arrive pas a comprendre ce qui peut bien se passer )

Afin de tester et comprendre comment faire, j'ai crée une micro lib Fortran. Voila le code :
      SUBROUTINE VW_Test(VarTest)
      INTEGER*2 VarTest
      VarTest = 10
      END

Je suis franchement pas doué (carrément une quiche même ) en Fortran mais je pense que vue la simplicité je ne doit pas avoir fait d'erreur.

La configuration de la lib est celle par défaut d'un projet "Static Libray" crée par Intel Visual Fortran.

Dans le C++ j'ai tester différente choses pour intégrer ma fonction :
void __stdcall VW_Test (short *);
extern void __stdcall VW_Test (short *);
extern "C" void __stdcall VW_Test (short *);
void __cdecl VW_Test (short *);
extern void __cdecl VW_Test (short *);
extern "C" void __cdecl VW_Test (short *);
//[...] et d'autre


L'appel de la fonction en C++ :
	short toto;
VW_Test(&toto);
printf("%d\n",toto);


Mais j'ai toujours une erreur a la compilation du style de
1>Menu_tst.obj : error LNK2019: symbole externe non résolu _VW_Test@4 référencé dans la fonction _main


Pourtant le compilateur cherche bien dans ma lib :
1>  Recherche en cours des bibliothèques
1>      Recherche en cours ...\VW_Test_F.lib :


Voila je pense avoir posté tout ce qui est intéressant pour mon problème, si ce n'est pas le cas je me tiens à votre disposition ^^.

Aidez moi svp je commence à être a cour d'idée

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo

4 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 avril 2012 à 18:39
J'AI ENFIN TROUVÉ !!!

Deux jours à piétiner et ne pas avancer d'un huitième de quart de poile de cul c'est dur (mon PC est franchement pas passé loin de pouvoir tester son coefficient de pénétration dans l'aire, perso je dirais pas mauvais )

Bon je m'égare

Configuration du projet Fortran :
Défaut (à confirmer j'ai toucher a ÉNORMÉMENT de choses entre temps) SAUF "Propriété de configuration / Fortran / External Procedures / Calling Convention" = STDCALL, REFERENCE (/iface:stdref)

Étrange j'étais certain d'avoir testé ce paramètre

Déclaration coté C++ :
extern "C" void __stdcall vw_test (short*);

ou (suivant la configuration "Propriété de configuration / Fortran / External Procedures / Name Case Interpretation")
extern "C" void __stdcall VW_TEST (short*);


Bon maintenant que mon micro projet fonctionne il vas faloire que je fasse fonctionner mon vrais projet (et là c'est encore une autre paire de manche mais bon je suis sur la bonne voie je pense )

Merci encore (même si tu n'a pas vraiment pu m'aider) Lucky92 de t'être intéressé à mon problème je me suis senti moins seul face à mon soucis.

Amicalement

PS :
J'ai également trouvé un outil intégré dans VS2010 pour tester les .lib : DUMPBIN
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
3
cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
5 avril 2012 à 15:29
Salut,

Il me semble qu'il faut préfixer d'un underscore les fonctions fortran qui seront appellées depuis l'extérieur, eg _VM_Test. Mais, mes souvenirs sont très flous... désolé de ne pas pouvoir aider plus.
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 avril 2012 à 15:43
Merci pour ta réponse

Mais non à priori ce n'est pas ça.
Si j'ajoute un underscore coté Frotran (voir *) je reçois une erreur à la compilation de ma lib :
1>...\VW_Test_F_Mod.F90(1): error #5192: Lead underscore not allowed


Et si je l'ajoute coté C++ j'ai toujours la même erreur

* :
      SUBROUTINE _VW_Test(VarTest)
      INTEGER*2 VarTest
      VarTest = 10
      END


Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 avril 2012 à 15:45
(heeeee oups un petit oubli : et l'ajouter des deux cotés, toujours le même comportement)


Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Rejoignez-nous