Herramientas de usuario

¡Esta es una revisión vieja del documento!


Tutorial de Compilación en Fortran

Este tutorial enseña los rudimentos de la compilación 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:

  1. El nombre del fichero que contiene el código fuente en fortran debe terminar con .f
  2. El compilador se invoca con f95 o gfortran.
  3. El compilador tiene varias opciones disponibles (-c, -o, -p, -S)
  4. 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 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:

f95 hola.f

Si no provee opciones, f95 aceptará código fuente Fortran o programas en lenguaje ensamblador que sigan las convenciones delineadas anteriormente. Compilará, ensamblará, y cargará dichos programas produciendo un ejecutable denominado convencionalmente a.out (lo que significa “salida de ensamblador”). El compilador f95 da como salida el código objeto en ficheros con el nombre del fichero de base, pero recurriendo a la extensión .o.

$ f95 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 tendrá los siguientes permisos

usuario leer, escribir, y ejecutar
grupo leer y ejecutar
otro Leer y ejecutar
No le será necesario cambiar los permisos con chmod, debido a que el compilador f95 otorgará el permiso de ejecución automáticamente.

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 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 de Fortran un nombre para fichero de salida, en lugar de hacerlo por defecto a a.out por defecto, usando la opción -o.

La opción -o solicita al compilador f95 que le informe al editor de enlaces el uso de un nombre distintivo para la salida.

No es necesario que la opción -o aparezca después del comando f95. El nombre de archivo que aparece después de -o será el nombre del fichero de salida. Por ejemplo, f95 fuente -o salida es lo mismo que f95 -o salida fuente-

$ f95 -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 opción hace que f95 compile programas de Fortran y disponga los programas de código ensamblador en un ficherode extensión .s.

Por ejemplo

$ f95 -S  hola.f
$ ls -c
ejemplo.f         hola      hex.c     octal.c
hola.c            hola.s    multiplo.c
$

El fichero hola.s contendrá 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 código fuente main.f, y sub1.f y sub2.f en ficheros separados.

Compilar pero no producir un módulo ejecutable

Para compilar los tres ficheros del ejemplo anterior (sin producir aún un ejecutable), deberá utilizar el siguiente comando:

f95 -c main.f sub1.f sub2.f

La opción -c compila, pero no carga los ficheros de código objeto. Esta opción hace que f95 compile y/o ensable los programas de código fuente, pero deje los programas de código objeto correspondiente con la extensión de fichero .o.

Como vemos, el resultado será:

$ f95 -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 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 y sub2.o) que podrán ser enlazados posteriormente ingresando f95 (sin opciones).

Compilar ficheros objeto para producir un módulo ejecutable

El comando para producir un módulo ejecutable a partir de varios ficheros objeto en este caso sería:

$ f95 main.o sub1.o sub2.o
$ ls -C
main.o sub1.o sub2.o a.out
$

Este sitio web utiliza cookies para guardar datos esenciales de su actividad, como su autenticación. Al entrar acepta el uso de cookies.

Más información