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!
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!
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.
Bonjour,
gcc est incapable de compiler du fortran ? ca m'étonne...
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?
![]()
![]()
![]()
Au temps pour moi !
Regarde ici ça peut peut-être t'aider !
http://www.starlink.rl.ac.uk/star/do...htx/node5.html
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...Envoyé par vince3320
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...et pouvoir me servir de ce que contient ce code..
Comment fait on ce genre de manip?
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/
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:
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!
8)Envoyé par vince3320
Je pense que c'est possible de récupérer les arguments de la ligne de commande.Envoyé par vince3320
Forum Fortran...!
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
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
3
4
5
6
7 SUBROUTINE toto( a, b, c) IMPLICIT NONE REAL a REAL b INTEGER 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void toto (float *a, float *b, int *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 !
Juste par curiosité: Elle fait quoi ta fonction en Fortran ?
question bete : pourquoi il y a encore des gens qui codent en FORTRAN ????
Y en a bien qui codent en cobolEnvoyé par mtopoloff
![]()
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.
Il faut se mefier du "jeunisme" en informatique ! La "vieillesse" d'un langage a plusieurs avantages, notamment :Envoyé par mtopoloff
- 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 !
Partager