Compilation frotran + C linux
Résolu
kammans
-
Char Snipeur Messages postés 10112 Statut Contributeur -
Char Snipeur Messages postés 10112 Statut Contributeur -
Bonjour,
'ai le probleme suivant.
Je compile un prog fortran. Je reccupere le .o
Ensuite je compile un autre prog en C qui fait appelle aux fonctions du
prog fortran vu plus haut.
Lors de l'edition de liens, j;ai ce type d'erreur:
$ g77 -c -O -fno-underscoring fort.f
$ gcc -Wall test.c -o test fort.o
fort.o: In function `fort':
fort.f:(.text+0xc): undefined reference to `s_wsle'
fort.f:(.text+0x20): undefined reference to `do_lio'
fort.f:(.text+0x28): undefined reference to `e_wsle'
collect2: ld a retourné 1 code d'état d'exécution
et quand je compile les 2 avec gcc ça passe pas non plus:
gcc -c -O -fno-underscoring fort.f
gcc -Wall test.c -o test fort.o
fort.o: In function `fort':
fort.f:(.text+0x3c): undefined reference to `_gfortran_st_write'
fort.f:(.text+0x53): undefined reference to `_gfortran_transfer_integer'
fort.f:(.text+0x5b): undefined reference to `_gfortran_st_write_done'
collect2: ld a retourné 1 code d'état d'exécution
mais quand je compile les deux avec g77 ça marche!
merci de m'expliquer ce qui se passe dans les 3 cas. et est ce que dans le 1er cas gcc fait des references vers des librairies qu'il trouve pas, et si c le cas les quels et comment les installer.
merci!
'ai le probleme suivant.
Je compile un prog fortran. Je reccupere le .o
Ensuite je compile un autre prog en C qui fait appelle aux fonctions du
prog fortran vu plus haut.
Lors de l'edition de liens, j;ai ce type d'erreur:
$ g77 -c -O -fno-underscoring fort.f
$ gcc -Wall test.c -o test fort.o
fort.o: In function `fort':
fort.f:(.text+0xc): undefined reference to `s_wsle'
fort.f:(.text+0x20): undefined reference to `do_lio'
fort.f:(.text+0x28): undefined reference to `e_wsle'
collect2: ld a retourné 1 code d'état d'exécution
et quand je compile les 2 avec gcc ça passe pas non plus:
gcc -c -O -fno-underscoring fort.f
gcc -Wall test.c -o test fort.o
fort.o: In function `fort':
fort.f:(.text+0x3c): undefined reference to `_gfortran_st_write'
fort.f:(.text+0x53): undefined reference to `_gfortran_transfer_integer'
fort.f:(.text+0x5b): undefined reference to `_gfortran_st_write_done'
collect2: ld a retourné 1 code d'état d'exécution
mais quand je compile les deux avec g77 ça marche!
merci de m'expliquer ce qui se passe dans les 3 cas. et est ce que dans le 1er cas gcc fait des references vers des librairies qu'il trouve pas, et si c le cas les quels et comment les installer.
merci!
A voir également:
- Compilation frotran + C linux
- Linux reader - Télécharger - Stockage
- Toutou linux - Télécharger - Systèmes d'exploitation
- R-linux - Télécharger - Sauvegarde
- Linux mint 22.1 - Accueil - Linux
- Backtrack linux - Télécharger - Sécurité
4 réponses
Salut.
Voici un lien qui devrais t'intéresser :
http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
Pour ton souci, il faut lier avec une bibliothèque des fonctions fortran de base.
Selon ta version de gcc, soit -lgfortran soit -lg2c.
Voici un lien qui devrais t'intéresser :
http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
Pour ton souci, il faut lier avec une bibliothèque des fonctions fortran de base.
Selon ta version de gcc, soit -lgfortran soit -lg2c.
ça marche quand j'utilise gcc avec -lgfortran
mais par contre il faut toujours utiliser le meme compilateur:
g77 -c -O -fno-underscoring fort.f
gcc -Wall test.c -o test fort.o -lgfortran
fort.o: In function `fort':
fort.f:(.text+0xc): undefined reference to `s_wsle'
fort.f:(.text+0x20): undefined reference to `do_lio'
fort.f:(.text+0x28): undefined reference to `e_wsle'
collect2: ld a retourné 1 code d'état d'exécution
mais par contre il faut toujours utiliser le meme compilateur:
g77 -c -O -fno-underscoring fort.f
gcc -Wall test.c -o test fort.o -lgfortran
fort.o: In function `fort':
fort.f:(.text+0xc): undefined reference to `s_wsle'
fort.f:(.text+0x20): undefined reference to `do_lio'
fort.f:(.text+0x28): undefined reference to `e_wsle'
collect2: ld a retourné 1 code d'état d'exécution
fait un "which g77" et un "which gcc" je pense que tu as deux versions de gcc installer.
La version de gcc inférieur à 4 utilise comme compilateur g77 (ou f77) et g2c comme bibliothèque.
La version de gcc supérieur à 4 utilise comme compilateur fortran gfortran (supporte le fortran 90) et comme bibliothèque -lgfortran.
gcc n'est qu'un appel de devanture, ce sont d'autre logiciel qui font le boulot dérrière selon l'extension des fichier ou les options choisies.
La version de gcc inférieur à 4 utilise comme compilateur g77 (ou f77) et g2c comme bibliothèque.
La version de gcc supérieur à 4 utilise comme compilateur fortran gfortran (supporte le fortran 90) et comme bibliothèque -lgfortran.
gcc n'est qu'un appel de devanture, ce sont d'autre logiciel qui font le boulot dérrière selon l'extension des fichier ou les options choisies.