Bonjour à tous,
Dans le cadre de mon travail, je suis amené à programmer en fortran sous windows (chez moi) (j'utilise le compilateur gfortran et l'IDE CODE::BLOCKS. Au bureau, j'utilise Ubuntu et aussi le compilateur gfortran mais bien sûr en ligne de commande.
Je possède un code (code minimal qui reproduit mon problème) composé d'un seul module hello.f90 et d'un programme principal (main.f90) qui fait naturellement appel au précédent module. Voici les deux morceaux de code en question :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 INCLUDE "hello.f90" ! main.f90 : programme principal PROGRAM salut use NBR print*, 'hello ------> a =', a end PROGRAM salut
Au bureau, il me suffit de compiler d'abord le module pour créer hello.o et hello.mod puis de compiler le programme principal afin de créer l’exécutable a.out :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 MODULE NBR ! le module : hello.f90 IMPLICIT NONE INTEGER :: a = 2 END MODULE NBR
toto@ >> gfortran -c hello.f90
toto@ >> gfortran main.f90
toto@ >> ./a.out
Tout marche parfaitement bien donc sous linux en ligne de commande avec gfortran.
Chez moi, j'utilise l'interface graphique de CODE::BLOCKS sous windows 7.
Voici brièvement la configuration
Settings / Compiler and debugger / Toolchain executables
C compiler : gfortran.exe
C++ : g++.exe
Linker for dynamic libs : gfortran.exe
Linker for static libs : ar.exe
Debugger : gdb.exe
Resource compiler : VIDE
Make program : make.exe
Pour compiler d'abord mon module, j'utilise la fonction Build / Compile current file : ce qui marche parfaitement bien et me créé hello.o et hello.mod ...
De la même façon, je compile le programme principal mais malheureusement aucun exécutable n'est créé. En cliquant ensuite sur build (petite roue jaune) pour construire mon projet, j'obtiens le message suivant m’empêchant d'aller plus loin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Linking console executable: bin\Release\toto.exe obj\Release\hello.o:hello.f90:(.data+0x0): multiple definition of `__nbr_MOD_a' obj\Release\main.o:main.f90:(.data+0x0): first defined here collect2: ld returned 1 exit status Process terminated with status 1 (0 minutes, 0 seconds) 0 errors, 0 warnings
Je rappelle que tout marche très bien en ligne de commande sous Linux mais pas avec code:blocks sous windows 7.
Comment fait t-on pour exécuter ce programme et quelles sont les différentes étapes de compilation afin que CODE::BLOCKS comprenne que le programme principal appelle le module hello ?
Par ailleurs, y a t-il un moyen d'utiliser code:blocks sous windows en ligne de commande comme on le ferait sous linux (avec les mêmes syntaxes) ?
Merci beaucoup
Antoine
Partager