Compiler Fortran

Guerric

Membre confirmé
22 Juin 2010
12
0
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
 
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)
 
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!
 
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
 
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!
 
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)
 
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)
 
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)
 
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
 
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
 
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


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