Tutorial de Compilacion en Fortran
Este tutorial ensena los rudimentos de la compilacion de programas en lenguaje Fortran.
Programa de Ejemplo en Fortran: Rutina main y dos subrutinas
Existen varias convenciones para usar el compilador de Fortran. Estas son:
- El nombre del fichero que contiene el codigo fuente en fortran debe
terminar con
.f
- El compilador se invoca con
gfortran
of95
. - El compilador tiene varias opciones disponibles (-c, -o, -p, -S)
- Se hacen preconexiones para stdin y stdout
Este es el ejemplo hola.f de codigo fuente de Fortran que se utilizara:
program llamando
write(6,100)
100 format (' Hola desde rutina 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
Compilar un programa
Para compilar el programa hola.f
en un programa
ejecutable, invoque el compilador de Fortran con:
gfortran hola.f
Si no provee opciones, gfortran aceptara codigo fuente Fortran o
programas en lenguaje ensamblador que sigan las convenciones delineadas
anteriormente. Compilara, ensamblara, y cargara dichos programas
produciendo un ejecutable denominado convencionalmente
a.out
(lo que significa "salida de ensamblador"). El
compilador gfortran da como salida el codigo objeto en ficheros con el
nombre del fichero de base, pero recurriendo a la extension
.o
.
$ gfortran hola.f
$ ./a.out
Hola desde rutina main!
Llamando a subrutina1!
Hola desde subrutina1!
Volviendo desde subrutina1!
Llamando a subrutina2!
Hola desde subrutina2!
Volviendo desde subrutina2!
Eso es todo, amigos!
$
El fichero a.out
que crea el compilador tendra los
siguientes permisos
usuario | leer, escribir, y ejecutar |
grupo | leer y ejecutar |
otro | Leer y ejecutar |
No le sera necesario cambiar los permisos con chmod, debido a que el compilador gfortran otorgara el permiso de ejecucion automaticamente.
Renombrar el modulo ejecutable
Podra renombrar el modulo ejecutable usando el comando mv. Los permisos de fichero quedaran igual que antes de renombrar el fichero.
$ mv a.out hola
$ ./hola
Hola desde rutina main!
Llamando a subrutina1!
Hola desde subrutina1!
Volviendo desde subrutina1!
Llamando a subrutina2!
Hola desde subrutina2!
Volviendo desde subrutina2!
Eso es todo, amigos!
$
Otorgar nombre al fichero de salida
Es posible otorgarle al compilador gfortran un nombre para fichero de
salida, en lugar de hacerlo por defecto a a.out
por
defecto, usando la opcion -o.
La opcion -o solicita al compilador gfortran que le informe al editor de enlaces el uso de un nombre distintivo para la salida.
No es necesario que la opcion -o aparezca despues
del comando gfortran. El nombre de archivo que aparece despues de -o
sera el nombre del fichero de salida. Por ejemplo,
gfortran fuente -o salida
es lo mismo que
gfortran -o salida fuente
-
$ gfortran -o hola.f
$ ./hola
Hola desde rutina 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 opcion hace que gfortran compile programas de Fortran y disponga
los programas de codigo ensamblador en un ficherode extension
.s
.
Por ejemplo
$ gfortran -S hola.f
$ ls -c
ejemplo.f hola hex.c octal.c
hola.c hola.s multiplo.c
$
El fichero hola.s
contendra el listado de ensamblado del
programa.
Rutina Principal y Dos subrutinas en tres ficheros fuente separados
Ahora lograremos lo mismo, pero dividiendo el programa en sus componentes individuales. Introduce los ficheros de codigo fuente main.f, y sub1.f y sub2.f en ficheros separados.
Compilar pero no producir un modulo ejecutable
Para compilar los tres ficheros del ejemplo anterior (sin producir aun un ejecutable), debera utilizar el siguiente comando:
gfortran -c main.f sub1.f sub2.f
La opcion -c compila, pero no carga los ficheros de
codigo objeto. Esta opcion hace que gfortran compile y/o ensable los
programas de codigo fuente, pero deje los programas de codigo objeto
correspondiente con la extension de fichero .o
.
Como vemos, el resultado sera:
$ gfortran -c main.f sub1.f sub2.f
main.f:
MAIN: llamando:
sub1.f:
sub1:
sub2.f:
sub2:
$ ls a.out *.o
a.out no encontrado
main.o
sub1.o
sub2.o
$ 3
La opcion -c provoca que el sistema de compilacion
suprima la fase de edicion de enlace. Esto produce un fichero o ficheros
objeto, en este ejemplo, main.o
, sub1.o
y
sub2.o
) que podran ser enlazados posteriormente ingresando
gfortran
o f95
(sin opciones).
Compilar ficheros objeto para producir un modulo ejecutable
El comando para producir un modulo ejecutable a partir de varios ficheros objeto en este caso seria:
$ gfortran main.o sub1.o sub2.o
$ ls -C
main.o sub1.o sub2.o a.out
$
Ver Tambien: Tutorial de Compilacion en COBOL