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
10
11 !------------------ ! main.f90 !------------------ INCLUDE "hello.f90" PROGRAM salut use NBR print*, 'hello ------> a =', a end PROGRAM salutAu bureau, il me suffit de compiler d'abord le module pour créer hello.o et hello.mod puis je compile 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
9 !---------------------- ! Le module hello.f90 !---------------------- MODULE NBR 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ée. En cliquant ensuite sur build (petite roue jaune) pour construire mon projet, j'obtiens le message suivant m’empêchant d'aller plus loin
Je rappelle que tout marche très bien en ligne de commande sous Linux mais pas avec code:blocks sous windows 7.
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
Comment demander à CODE::BLOCKS de me compiler le programme principal mais en prenant en compte le fait ce que programme appelle un module ? Je vois pas du tout comment configurer la bête pour y arriver...
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