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 :

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
et

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
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 :

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