Herramientas de usuario

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
tutorial_de_compilacion_en_fortran [2025/02/27 18:05] perontutorial_de_compilacion_en_fortran [2026/04/21 16:09] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
-=====Tutorial de Compilación en FORTRAN======+=====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:+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:
  
   - El nombre del fichero que contiene el código fuente en fortran debe terminar con ''.f''   - El nombre del fichero que contiene el código fuente en fortran debe terminar con ''.f''
-  - El compilador se invoca con ''f77''.+  - El compilador se invoca con ''gfortran'' o ''f95''.
   - El compilador tiene varias opciones disponibles (**-c**, **-o**, **-p**, **-S**)   - El compilador tiene varias opciones disponibles (**-c**, **-o**, **-p**, **-S**)
   - Se hacen preconexiones para //stdin// y //stdout//   - Se hacen preconexiones para //stdin// y //stdout//
  
-Este es el ejemplo [[hola.f]] de código fuente de fortran que se utilizará:+Este es el ejemplo [[hola.f]] de código fuente de Fortran que se utilizará:
  
  
-<code fortran>+<file fortran hola.f>
       program llamando       program llamando
       write(6,100)       write(6,100)
-100   format (' Hola desde main!',/)+100   format (' Hola desde rutina main!',/)
       write(6,110)       write(6,110)
 110   format(' Llamando a subrutina1!',/) 110   format(' Llamando a subrutina1!',/)
Línea 39: Línea 43:
 210   format(t20,' Hola desde subrutina2!',/) 210   format(t20,' Hola desde subrutina2!',/)
       end       end
-</code>+</file>
  
  
-====  Compilando un programa====+===  Compilar un programa===
  
 +Para compilar el programa ''hola.f'' en un programa ejecutable, invoque el compilador de Fortran con:
  
 +<code bash>
 +gfortran hola.f
 +</code>
  
-Para compilar el programa hola.f en un programa ejecutable, invoca el compilador de Fortran con:+Si no provee opciones, gfortran 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 gfortran da como salida el código objeto en ficheros con el nombre del fichero de base, pero recurriendo a la extensión ''.o''.
  
-<code bash>f77 hola.f</code> 
  
-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. +<code bash> 
- +gfortran hola.f 
- +./a.out 
-<ocde bash> +Hola desde rutina main!
-$f77 hola.f +
-$a.out +
-Hola desde main!+
  
 Llamando a subrutina1! Llamando a subrutina1!
Línea 74: Línea 78:
 </code> </code>
  
 +El fichero ''a.out'' que crea el compilador tendrá los siguientes [[permisos_de_archivo_y_directorio|permisos]]
  
-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 |
  
-              usuario - leerescribir, y ejecutar +>No le será necesario cambiar los permisos con //chmod//debido a que el compilador gfortran otorgará el permiso de ejecución automáticamente.
-              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===
  
-==== Renombrar el módulo ejecutable==== 
  
- +Podrá renombrar el módulo ejecutable usando el comando [[aprende_a_usar_la_terminal#ejercicio_8mover_o_renombrar_con_mv|mv]]. Los permisos de fichero quedarán igual que antes de renombrar el fichero.
-Podrá renombrar el módulo ejecutable usando el comando mv. Los permisos de fichero quedarán igual que antes de renombrar el fichero.+
  
  
 <code bash> <code bash>
-$mv a.out hello +$ mv a.out hola 
-$hello +./hola 
-Hola desde main!+Hola desde rutina main!
  
 Llamando a subrutina1! Llamando a subrutina1!
Línea 113: Línea 116:
  
  
-====  Dar un nombre al fichero de salida====+===  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 opción **-o**.
  
-Es posible tener la salida enviada a un fichero dado, en lugar del a.out por defecto, usando el siguiente comando:+La opción **-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 opción **-o** aparezca después del comando gfortran. El nombre de archivo que aparece después de -o será el nombre del fichero de salida. Por ejemplo, ''gfortran fuente -o salida'' es lo mismo que ''gfortran -o salida fuente''-
  
-    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: 
  
 <code bash> <code bash>
-$f77 -o hola.f +gfortran -o hola.f 
-$hola +./hola 
-Hola desde main!+Hola desde rutina main!
  
 Llamando a subrutina1! Llamando a subrutina1!
Línea 152: Línea 146:
 </code> </code>
  
-==== Producir un listado de Ensamblador====+=== Producir un listado de Ensamblador ===
  
-Esta opción hace que f77 compile programas de fortran dieje los programas de código ensa,blador en un fichero, con la extensión .s.+Esta opción hace que gfortran compile programas de Fortran disponga los programas de código ensamblador en un ficherode  extensión ''.s''.
  
- +Por ejemplo
-    Command Format:  f77 -S hola.f +
-    -S = Compile only +
- +
- +
-Sample Session:+
  
 <code bash> <code bash>
-$f77 -S  hello.f +gfortran -S  hola.f 
-$ls -c +$ ls -c 
-example.f         hello     hex.c     octal.c +ejemplo.f         hola      hex.c     octal.c 
-hello.c           hello.s   multiply.c+hola.c            hola.s    multiplo.c
 $ $
 </code> </code>
  
-El fichero hola.s contiene el listado de ensamblado.+El fichero ''hola.s'' contendrá el listado de ensamblado del programa.
  
  
  
-==== Rutina Principal y Dos subrutinas en tres ficheros fuete separados==== +==== Rutina Principal y Dos subrutinas en tres ficheros fuente separados====
- +
- +
- +
-<code bash> +
-$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 +
-</code>+
  
 +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====+=== Compilar pero no producir un módulo ejecutable===
  
-Al usar el programa anterior, el siguiente comando 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:
  
 +<code bash>gfortran -c main.f sub1.f sub2.f</code>
  
-    Command Format:  f77 -c main.f sub1.f sub2.f+La opción **-c** compila, pero no carga los ficheros de código objetoEsta opción hace que gfortran 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''.
  
-    -c = Compilebut 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.+Como vemosel resultado será:
  
  
 <code bash> <code bash>
-$f77 -c main.f sub1.f sub2.f+gfortran -c main.f sub1.f sub2.f
 main.f: main.f:
      MAIN: llamando:      MAIN: llamando:
Línea 228: Línea 187:
 sub2.f: sub2.f:
      sub2:      sub2:
-$ls a.out *.o +$ ls a.out *.o 
-a.out not found +a.out no encontrado
-funct1.o +
-funct2.o +
-hello.o+
 main.o main.o
 sub1.o sub1.o
Línea 239: Línea 195:
 </code> </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 sub2.o) que pueden ser enlazados posteriormente con f77 sin opciones.+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 ''gfortran'' o ''f95'' (sin opciones).
  
  
-==== Compiladno ficheros objeto para producir un módulo ejecutable===+=== Compilar 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+
  
 +El comando para producir un módulo ejecutable a partir de varios ficheros objeto en este caso sería:
  
 <code bash> <code bash>
-$f77 main.o sub1.o sub2.o +gfortran main.o sub1.o sub2.o 
-$ls -C +$ ls -C 
-funct1.o funct2.o hello.o main.o sub1.o sub2.o a.out+main.o sub1.o sub2.o a.out
 $ $
 </code> </code>
 +
 +__Ver También__: [[Tutorial de Compilación en COBOL]]

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