# Compiler Fortran



## Guerric (22 Juin 2010)

Bonjour,

Dans le cadre de mes études, je dois compiler du code Fortran. Pour information, il s'agit de code de ce type-ci : http://www.uq.edu.au/~e4mmacro/dsmcpg/tube0.htm, utilisés pour simuler des écoulement de fluides. Peut-être qu'ils sont mal écrits, mais j'en doute.

J'ai d'abord regardé si CodeBlocks me permettait de compiler du code Fortran, mais apparemment pas. Je serais enchantés d'apprendre qu'il existe des plug-ins mais je n'en ai pas trouvé.

J'ai ensuite essayé via XCode, comme expliqué sur ce petit tutoriel : http://www.macresearch.org/xcode_tutorial_fortran_only_projects, mais je n'ai pas du tout les même fenêtres. Sans doute n'ai-je pas les plug-ins nécessaires, mais à nouveau je ne les trouve pas.

Enfin, j'ai tenté via gfortran, disponible ici : http://hpc.sourceforge.net/. J'ai téléchargé GCC 4.5 pour Snow Leopard. Malheureusement, en ouvrant mon code, enregistré en .rtf, il me renvoie cette erreur :
file is not of required architecture
Undefined symbols:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Quelqu'un pourrait-il me renseigner sur la marche à suivre? Est-ce le code qui n'est pas bien écrit? Idéalement, je préférerais pouvoir compiler en Fortran dans un univers plus agréable (CodeBlocks ou XCode), mais si ce n'est pas possible un truc pour y arriver via la console me convient parfaitement!

Merci à tous!

Guerric


----------



## Fingah (23 Juin 2010)

salut

bon déjà hpc on oublie ... les binaires fournis semblent contenir qq bugs (probablement que cela n'a rien à voir avec ton problème mais bon)

le mieux:
http://r.research.att.com/tools/

donc tu peux déjà commencer par faire une reinstall propre

sur cette page il y a de quoi installer un compil fortran (gfortran) accessible depuis Xcode

tiens moi au courant si le problème persiste

---------- Nouveau message ajouté à 11h35 ---------- Le message précédent a été envoyé à 11h34 ----------

oups ... oublie le rtf aussi

ton code fortran doit être dans un fichier texte brut avec l'extension .f ou .fXX (XX étant la version fortran 77, 90, 95)


----------



## Guerric (24 Juin 2010)

Merci!

J'ai donc téléchargé le GNU Fortran compiler à l'adresse que tu m'as renseigné. Mais je ne vois pas comment y accéder depuis XCode. Est-ce que XCode devrait me proposer spontanément de compiler en Fortran ou est-ce à moi d'édicter de nouvelles règles? Si c'est cela, lesquelles?

Merci!


----------



## Fingah (24 Juin 2010)

quel composant as tu installé ?

pour une utilisation dans Xcode il faut regarder la section   
*Apple Xcode gcc-42 add-ons


mais tu devrais deja pouvoir compiler en ligne de commande

donc:

1/ test en ligne de commande: genre gfortran file.f

2/ dans Xcode il faut (de memoire) aller dans les reglages du projet et selectionner le compilateur fortran
*


----------



## Guerric (24 Juin 2010)

On va y arriver...

J'ai téléchargé le package pour XCode 3.2, qui est la version que j'ai : gfortran-42-5646.pkg. J'ai cherché pour voir si d'autres versions de gfortran trainaient encore quelque part dans mon ordinateur, mais apparemment elles ont toutes été écrasées...

J'ai écrit un petit code :
PROGRAM HelloWorld
	PRINT *, "Hello World"
END PROGRAM HelloWorld
Que j'enregistre sous HelloWorld.f90. Je l'ouvre dans la console avec la commande suivante : gfortran HelloWorld.f90
Et là il me sort une quantité incroyable d'erreurs!

Pour y arriver dans XCode, comment puis-je accéder aux réglages du projet?

Un tout grand merci de me consacrer autant de temps!


----------



## Fingah (24 Juin 2010)

que donne la commande 
gfortran -v 
dans le Terminal ?

peux tu copier / coller les erreurs ?


----------



## Guerric (24 Juin 2010)

Voici ce que me renvoie gfortran -v

Using built-in specs.
Target: i686-apple-darwin10
Configured with: /Builds/apple/gcc-5646-gf/build/obj/src/configure --disable-checking --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++,fortran --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5646)


----------



## Fingah (25 Juin 2010)

bon ça semble indiqué que le compilateur est correctement installé; c'est déjà ça

peux tu coller le résultat de ta commande de compilation ?


----------



## Guerric (25 Juin 2010)

*Le code que je lui demande de compiler est celui que j'ai mentionné dans mon post plus haut, écrit en rtf mais sauvé en .f90. Voici ce qu'il me renvoie après la compilation :*

/Users/guerric/Desktop/HelloWorld.f90:1:

{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf290
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:2:

{\fonttbl\f0\fmodern\fcharset0 Courier;}
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:2.39:

{\fonttbl\f0\fmodern\fcharset0 Courier;}
                                      1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:3:

{\colortbl;\red255\green255\blue255;}
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:3.11:

{\colortbl;\red255\green255\blue255;}
          1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:3.36:

{\colortbl;\red255\green255\blue255;}
                                   1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:4:

\paperw11900\paperh16840\margl1440\margr1440\vieww9000\viewh8400\viewkind0
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:5:

\deftab720
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:6:

\pard\pardeftab720\ql\qnatural
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:8:

\f0\fs32 \cf0 PROGRAM HelloWorld\
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:9.23:

 PRINT *, "Hello World"\
                      1
Error: Syntax error in PRINT statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:10.22:

END PROGRAM HelloWorld}
                     1
Error: Syntax error in END PROGRAM statement at (1)


----------



## Fingah (25 Juin 2010)

oui mais non ... 

les erreurs proviennent de sequence RTF

cree un fichier texte avec TextEdit et vraiment un fichier txt; copie colle ton prog fortran compile et ca devrait passer

PS: quand tu lances TExtEdit fais pomme+maj+T pour passer en mode text (en mode rtf il ya une regle en haut avec les options de style pas en mode texte ... si ca peut t'aider a faire la difference)


----------



## Guerric (26 Juin 2010)

Génial! Merci beaucoup! Vraiment sympa de m'aider comme ça!

Par contre, je ne sais pas du tout sous quelle version de Fortran ce code-ci est écrit. Quand je compile en .f ou en .f90 il me renvoie des erreurs de syntaxe : http://www.uq.edu.au/~e4mmacro/dsmcpg/tube0.htm

Merci!


----------



## Fingah (26 Juin 2010)

j'ai regardé vite fait le code mais je n'en sais pas plus que toi ... je dirai en étant méchant qu'un code de scientifique (physicien ?) doit être du f77  (j'en suis donc je me permets)

copie colle les erreurs ça sera plus simple pour savoir comment régler le problème


----------



## Guerric (2 Juillet 2010)

Désolé pour le retard de ma réponse, j'étais à l'étranger. J'ai donc essayé de compiler en .f77, en .f90 et en .f. C'est toujours avec le code qui se trouve ici :  http://www.uq.edu.au/~e4mmacro/dsmcpg/tube0.htm. Alors alors :

*Quand je compile en .f77*

ld: warning: in /Users/guerric/Desktop/HelloWorld.f77, file was built for unsupported file format which is not the architecture being linked (x86_64)
Undefined symbols:
  "_MAIN__", referenced from:
      _main in libgfortranbegin.a(fmain.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status

*Quand je compile en .f90*

/Users/guerric/Desktop/HelloWorld.f90:4:

*     direct simulation code for 
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:5:

*     COLLISIONLESS flow in a shock tube
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:6:

*     simulators move and bounce off end walls of
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:7:

*     shock tube, but have no collisions with other moelcules
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:8:

*     shows how to set initial condiations
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:9:

*     move simulators, sort into cells,
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:10:

*     take instantaneous samples of flow state 
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:11:

*     in each cell.
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:12:

*     initial state is high pressure (right side). low presure gas
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:13:

*     at right end of the tube. discrete change of state ("diaphragm")
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:14:

*     near middle of tube. "diaphragm" dissolves at t=0
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:15:

*     simulation continues fastest simulators move 
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:16:

*     appoximately 1/3 length
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:18:

*     set some arbitrary constants
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:52:

*     count the incident and reflected monentum on end walls of tube
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:53:

*     can check wall pressures at end of simulation
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:68:

****** end of declarations *****************************************
1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:72.43:

 call init(mass,mass1,px,vx,vy,vz,pcell,Nm, ! cell # and set plist
                                          1
Error: Syntax error in argument list at (1)
/Users/guerric/Desktop/HelloWorld.f90:73.5:

     &          NH,NL,NmH,NmL,R,TH,TL,dx) 
    1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:81.36:

  call state(mass,vx,vy,vz,plist,Nm, ! instanateous flow state
                                   1
Error: Syntax error in argument list at (1)
/Users/guerric/Desktop/HelloWorld.f90:82.5:

     &                    N_in,badd,Nc,
    1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:83.5:

     &                    vol,R,rhoL,TL) 
    1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:119.37:

   call state(mass,vx,vy,vz,plist,Nm, ! instanateous flow state
                                    1
Error: Syntax error in argument list at (1)
/Users/guerric/Desktop/HelloWorld.f90:120.5:

     &                    N_in,badd,Nc,
    1
Error: Unclassifiable statement at (1)
/Users/guerric/Desktop/HelloWorld.f90:121.5:

     &                    vol,R,rhoL,TL) 
    1
Error: Unclassifiable statement at (1)
Fatal Error: Error count reached limit of 25.

*Et finalement quand je compile en .f*


Undefined symbols:
  "_move1d_", referenced from:
      _MAIN__ in cc4YBL1q.o
  "_rnp_", referenced from:
      _init_ in cc4YBL1q.o
      _init_ in cc4YBL1q.o
      _init_ in cc4YBL1q.o
  "_rf_", referenced from:
      _init_ in cc4YBL1q.o
  "_index_", referenced from:
      _MAIN__ in cc4YBL1q.o
      _MAIN__ in cc4YBL1q.o
ld: symbol(s) not found
collect2: ld returned 1 exit status


----------



## tatouille (3 Juillet 2010)

compile -arch i386 tu es sous snow leo l'architecture  par default est x86_64 
le linker se plaint qu' il n'a pas les libs contenant cette architecture que tu as ciblé

il ne trouve pas le premier symbole ton il a besoin arch32._MAIN__
toi tu compiles arch64._MAIN__ les sets d'instructions sont differents et le binaire n'a pas la meme composition

de plus ton compiler devrais targeter 4.0 et non superieur


faudrait un peu apprendre le baba avant de se lancer dans des bidouilles incertaines.

http://r.research.att.com/tools/

c'est completement fumé ce truc

la seule chose valable et encore en beta est via macort gcc4.6 plus varianT fortran


----------



## Guerric (3 Juillet 2010)

Aïe...

Désolé, mais il va encore falloir m'aider. Comment est-ce que je compile -arch i386?

Merci beaucoup!


----------



## tatouille (3 Juillet 2010)

gfortran -m32


----------



## Guerric (3 Juillet 2010)

Il me répond :

i686-apple-darwin10-gfortran-4.2.1: no input files


----------



## tatouille (3 Juillet 2010)

Guerric a dit:


> Il me répond :
> 
> i686-apple-darwin10-gfortran-4.2.1: no input files



gfortran -m32 HelloWorld.f77 (input file to process)

:sleep:


----------



## Guerric (3 Juillet 2010)

Maintenant il répond :

ld: warning: in /Users/guerric/Desktop/HelloWorld.f77, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
  "_MAIN__", referenced from:
      _main in libgfortranbegin.a(fmain.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status

Désolé, hein, je suis pas terrible. Mais j'apprends! Merci en tout cas!


----------



## tatouille (3 Juillet 2010)

ce packet est definitevement non compatible avec snow leopard

install macports et compile gcc4.6 avec le support fortran

peux tu faire un 

lipo -info /whatever/install/path/libgfortranbegin.a

sous snow leopard gcc 4.2 la description/prefix (gcc/ld ce sert de ca pour trouver le bon dossier de ses objets statiques c-runtime) est i686 change ton target gcc to 4.0, tu as installe les dependences pour 4.2 qui n'a pas de prefix i386 , je ne sais pas le bordel qu' a foutu ce packet mais enleves tout ca


----------



## Guerric (3 Juillet 2010)

Houlala! Je pense que je vais de nouveau avoir besoin de quelques indications supplémentaires. Qu'est-ce que je dois faire exactement?


----------



## Guerric (8 Juillet 2010)

Problème insoluble? Personne ne pourra jamais compiler du code Fortran sous Snow Leopard?


----------

