Herramientas de usuario

¡Esta es una revisión vieja del documento!


Tutorial de Compilación en 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 f77.
  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 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, invoque el compilador de Fortran con:

f77 hola.f

Si no provee opciones, f77 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 f77 da como salida el código objeto en ficheros con el nombre del fichero de base, pero recurriendo a la extensión .o.

<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>

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 f77 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 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 f77 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 f77. El nombre de archivo que aparece después de -o será el nombre del fichero de salida. Por ejemplo, f77 fuente -o salida es lo mismo que f77 -o salida fuente-

$ 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 disponga los programas de código ensamblador en un ficherode extensión .s.

Por ejemplo

$f77 -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

Es posible lograr lo mismo haciendo un programa main.f, y sub1.f y sub2.f en ficheros separados

$cat main.f
     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
$cat sub1.f
     subroutine sub1
     write(6,200)
200  format(t20,' Hola desde subrutina1!',/)
     end
$cat sub2.f
     subroutine sub2
     write(6,210)
210  format(t20,' Hola desde subrutina2!',/)
     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

f77 -c main.f sub1.f sub2.f
  • *-c compila, pero no carga los ficheros de código objeto. Esta opción hace que f77 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. <code bash> $f77 -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 </code> 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 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 en este caso sería:

$f77 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