¡Esta es una revisión vieja del documento!
Tutorial de Compilación en FORTRAN
Programa de Ejemplo: Rutina mail y dos subrutinas
Existen varias convenciones para usar el compilador de FORTRAN. Estas son:
- El nombre del fichero que contiene el código fuente en fortran debe terminar con
.f - El compilador se invoca con
f77. - El compilador tiene varias opciones disponibles (-c, -o, -p, -S)
- Se hacen preconexiones para stdin y stdout
Este es el ejemplo hola.f de código fuente de fortran que se utilizará:
program llamando write(6,100) 100 format (' Hola desde main!',/) write(6,110) 110 format(' Llamando a subrutina1!',/) call sub1 write(6,120) 120 format(t15' Volviendo desde subrutina1!',/) write(6,130) 130 format(' Llamando a subrutina2!',/) call sub2 write(6,140) 140 format(t15' Volviendo desde subrutina2!',/) write(6,150) 150 format(' Eso es todo, amigos!') end subroutine sub1 write(6,200) 200 format(t20,' Hola desde subrutina1!',/) end subroutine sub2 write(6,210) 210 format(t20,' Hola desde subrutina2!',/) end
Compilando un programa
Para compilar el programa hola.f en un programa ejecutable, invoca el compilador de Fortran con:
f77 hola.f
Si no se proveen opciones, f77 acepta código fuente FORTRAN y programas en lenguaje ensamblador que sigan las convenciones delineadas anteriormente. Compilará, ensamblará, y cargará dichos programas prara producir un ejecutable llamado a.out. La utilidad f77 da como salida el código objeto en ficheros con el nombre del fichero de base (todo antes del punto) como fuente, pero con una extensión de nombre de fichero .o. El a.out significa “salida de ensamblador”. Esto es por defecto.
<ocde bash> $f77 hola.f $a.out Hola desde main!
Llamando a subrutina1!
Hola desde subrutina1!
Volviendo desde subrutina1!
Llamando a subrutina2!
Hola desde subrutina2!
Volviendo desde subrutina2!
Eso es todo, amigos! $ </code>
NOTE: The a.out file that was created by the f77 utility has the following permissions:
usuario - leer, escribir, y ejecutar
grupo - leer y ejecutar
otro - Leer y ejecutar
It is not necessary for you to change the permissions using the chmod command because the f77 utility set the execute permissions for you.
Renombrar el módulo ejecutable
Podrá renombrar el módulo ejecutable usando el comando mv. Los permisos de fichero quedarán igual que antes de renombrar el fichero.
$mv a.out hello $hello Hola desde main! Llamando a subrutina1! Hola desde subrutina1! Volviendo desde subrutina1! Llamando a subrutina2! Hola desde subrutina2! Volviendo desde subrutina2! Eso es todo, amigos! $
Dar un nombre al fichero de salida
Es posible tener la salida enviada a un fichero dado, en lugar del a.out por defecto, usando el siguiente comando:
Command Format: f77 -o output source
output - the name of the executable file source - the name of the Fortran source code file
La opción -o le dice a la utilidad f77 que le diga al editor de enlaces que use el nombre proisto para la salida, en lugar de usar el a.out por defecto.
NOTE: It is not necessary for the -o option to appear after the f77 command. The filename that appears after the -o is the name of the output file. For example, f77 source -o output is the same as f77 -o output source.
Sample Session:
$f77 -o hola.f $hola Hola desde main! Llamando a subrutina1! Hola desde subrutina1! Volviendo desde subrutina1! Llamando a subrutina2! Hola desde subrutina2! Volviendo desde subrutina2! Eso es todo, amigos! $
Producir un listado de Ensamblador
Esta opción hace que f77 compile programas de fortran y dieje los programas de código ensa,blador en un fichero, con la extensión .s.
Command Format: f77 -S hola.f -S = Compile only
Sample Session:
$f77 -S hello.f $ls -c example.f hello hex.c octal.c hello.c hello.s multiply.c $
El fichero hola.s contiene el listado de ensamblado.
Rutina Principal y Dos subrutinas en tres ficheros fuete separados
$cat main.f program calling write(6,100) 100 format (' Hello from main!',/) write(6,110) 110 format(' Calling subroutine1!',/) call sub1 write(6,120) 120 format(t15' Back from subroutine1!',/) write(6,130) 130 format(' Calling subroutine2!',/) call sub2 write(6,140) 140 format(t15' Back from subroutine2!',/) write(6,150) 150 format(' That's all, folks!') end $cat sub1.f subroutine sub1 write(6,200) 200 format(t20,' Hello from subroutine1!',/) end $cat sub2.f subroutine sub2 write(6,210) 210 format(t20,' Hello from subroutine2!',/) end
Compilar pero no producir un módulo ejecutable
Al usar el programa anterior, el siguiente comando compilará pero no producirá un módulo ejecutable
Command Format: f77 -c main.f sub1.f sub2.f
- c = Compile, but do not load object files. This option causes f77 to compile and/or assemble source code programs and leave the corresponding object programs in files with filename extensions of .o.
$f77 -c main.f sub1.f sub2.f main.f: MAIN: llamando: sub1.f: sub1: sub2.f: sub2: $ls a.out *.o a.out not found funct1.o funct2.o hello.o main.o sub1.o sub2.o $ 3
La opción -c provoca que el sistema de compilación suprima la fase de edición de enlace. Esto produce un fichero o ficheros objeto, en este ejemplo, main.o, sub1.o sub2.o) que pueden ser enlazados posteriormente con f77 sin opciones.
Compiladno ficheros objeto para producir un módulo ejecutable
El comando para producir un módulo ejecutable a partir de varios ficheros objeto es la siguiente manera:
Command Format: f77 obj_1 obj_2 obj_3 obj_1 through obj_n - the object files
$f77 main.o sub1.o sub2.o $ls -C funct1.o funct2.o hello.o main.o sub1.o sub2.o a.out $
