Herramientas de usuario

Diferencias

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

Enlace a la vista de comparación

Próxima revisión
Revisión previa
tutorial_de_compilacion_en_fortran [2025/02/27 05:52] – creado 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 FOTRAN====== +=====Tutorial de Compilación en Fortran======
-====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 .+Este tutorial enseña los rudimentos de la compilación de programas en lenguaje [[Fortran]].
-  - El compilador se incova 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á:+====Programa de Ejemplo en FortranRutina main y dos subrutinas====
  
  
-<code fortran> +Existen varias convenciones para usar el compilador de Fortran. Estas son: 
-      program calling+ 
 +  - El nombre del fichero que contiene el código fuente en fortran debe terminar con ''.f'' 
 +  - El compilador se invoca con ''gfortran'' o ''f95''
 +  - 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á: 
 + 
 + 
 +<file fortran hola.f
 +      program llamando
       write(6,100)       write(6,100)
-100   format (' Hello from main!',/)+100   format (' Hola desde rutina main!',/)
       write(6,110)       write(6,110)
-110   format(' Calling subroutine1!',/)+110   format(' Llamando a subrutina1!',/)
       call sub1       call sub1
       write(6,120)       write(6,120)
-120   format(t15' Back from subroutine1!',/)+120   format(t15' Volviendo desde subrutina1!',/)
       write(6,130)       write(6,130)
-130   format(' Calling subroutine2!',/)+130   format(' Llamando a subrutina2!',/)
       call sub2       call sub2
       write(6,140)       write(6,140)
-140   format(t15' Back from subroutine2!',/)+140   format(t15' Volviendo desde subrutina2!',/)
       write(6,150)       write(6,150)
-150   format(' That's allfolks!')+150   format(' Eso es todoamigos!')
       end       end
       subroutine sub1       subroutine sub1
       write(6,200)       write(6,200)
-200   format(t20,' Hello from subroutine1!',/)+200   format(t20,' Hola desde subrutina1!',/)
       end       end
       subroutine sub2       subroutine sub2
       write(6,210)       write(6,210)
-210   format(t20,' Hello from subroutine2!',/)+210   format(t20,' Hola desde subrutina2!',/)
       end       end
-</code>+</file>
  
  
-====  FORTRAN: Compilando un programa====+===  Compilar un programa===
  
 +Para compilar el programa ''hola.f'' en un programa ejecutable, invoque el compilador de Fortran con:
  
-El compilador FORTRAN se incova con:+<code bash> 
 +gfortran hola.f 
 +</code>
  
 +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''.
  
  
-    Command Format:  f77 +<code bash> 
-    +$ gfortran hola.f 
 +$ ./a.out 
 +Hola desde rutina main!
  
-Para compilar el programa hola.f en un programa ejecutable, use el siguiente comando:+Llamando a subrutina1!
  
-<code bash>f77 hola.f</code>+             Hola desde subrutina1!
  
-Si no se proveen opciones, f77 acepta código fuente FORTRAN y programas en lenguaje ensamblador que sigan las convenciones delineadas anteriorlemten. 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 ensablador". Esta es pod defecto.+        Volviendo desde subrutina1!
  
 +Llamando a subrutina2!
  
-<ocde bash> +             Hola desde subrutina2!
-$f77 hola.f +
-$a.out +
-Hello from main!+
  
-Calling function1!+        Volviendo desde subrutina2!
  
-             Hello from function1! +Eso es todo, amigos!
- +
-        Back from function1! +
- +
-Calling function2! +
- +
-             Hello from function2! +
- +
-        Back from function2! +
- +
-That's all!+
 $ $
 </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===
  
-====FORTRAN: 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 
-Hello from main!+Hola desde rutina main!
  
-Calling function1!+Llamando a subrutina1!
  
-             Hello from function1!+             Hola desde subrutina1!
  
-        Back from function1!+        Volviendo desde subrutina1!
  
-Calling function2!+Llamando a subrutina2!
  
-             Hello from function2!+             Hola desde subrutina2!
  
-        Back from function2!+        Volviendo desde subrutina2!
  
-That's all!+Eso es todo, amigos!
 $ $
 </code> </code>
  
  
-====FORTRAN: 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 +<code bash> 
-    source the name of the Fortran source code file+$ gfortran -o hola.f 
 +$ ./hola 
 +Hola desde rutina main!
  
 +Llamando a subrutina1!
  
-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.+             Hola desde subrutina1!
  
-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.+        Volviendo desde subrutina1!
  
-Sample Session:+Llamando a subrutina2!
  
-<code bash> +             Hola desde subrutina2!
-$f77 -o hola.f +
-$hola +
-Hello from main! +
-Calling function1!+
  
-             Hello from function1!+        Volviendo desde subrutina2!
  
-        Back from function1! +Eso es todo, amigos!
- +
-Calling function2! +
- +
-             Hello from function2! +
- +
-        Back from function2! +
- +
-That's all!+
 $ $
 </code> </code>
  
-====FORTRAN: Producir un listado de Ensamblador===+=== 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+
  
 +Esta opción hace que gfortran compile programas de Fortran y disponga los programas de código ensamblador en un ficherode  extensión ''.s''.
  
-Sample Session:+Por ejemplo
  
 <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.
  
  
  
-====FORTRAN: Rutina Principal y Dos subrutinas en tres ficheros fuete separados====+==== 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.
  
-Sample Session:+=== Compilar pero no producir un módulo ejecutable===
  
-</code bash> +Para compilar los tres ficheros del ejemplo anterior (sin producir aún un ejecutable)deberá utilizar el siguiente comando:
-$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> +
- +
- +
-====FORTRAN: Compilar pero no producir un módulo ejecutable==== +
- +
-Al usar el programa anterior, el siguiente comando compilará pero no producirá un módulo ejecutable+
  
 +<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: calling:+     MAIN: llamando:
 sub1.f: sub1.f:
      sub1:      sub1:
 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 244: 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).
  
  
-====FORTRAN: 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