Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| tutorial_de_compilacion_en_fortran [2025/02/27 18:50] – peron | tutorial_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====== |
| + | |||
| + | |||
| + | |||
| + | 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==== | ====Programa de Ejemplo en Fortran: Rutina main y dos subrutinas==== | ||
| - | Existen varias convenciones para usar el compilador de FORTRAN. Estas son: | + | 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 '' | - El nombre del fichero que contiene el código fuente en fortran debe terminar con '' | ||
| - | - El compilador se invoca con '' | + | - El compilador se invoca con '' |
| - 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 | + | Este es el ejemplo [[hola.f]] de código fuente de Fortran |
| - | <code fortran> | + | <file fortran |
| program llamando | program llamando | ||
| write(6, | write(6, | ||
| - | 100 | + | 100 |
| write(6, | write(6, | ||
| 110 | 110 | ||
| Línea 39: | Línea 43: | ||
| 210 | 210 | ||
| end | end | ||
| - | </code> | + | </file> |
| - | ==== | + | === |
| Para compilar el programa '' | Para compilar el programa '' | ||
| - | <code bash>f77 hola.f</ | + | <code bash> |
| + | gfortran | ||
| + | </ | ||
| - | Si no provee opciones, | + | Si no provee opciones, |
| - | <ocde bash> | + | <code bash> |
| - | $ f77 hola.f | + | $ gfortran |
| - | $ a.out | + | $ ./a.out |
| - | Hola desde main! | + | Hola desde rutina |
| Llamando a subrutina1! | Llamando a subrutina1! | ||
| Línea 78: | Línea 84: | ||
| |otro |Leer y ejecutar | | |otro |Leer y ejecutar | | ||
| - | >No le será necesario cambiar los permisos con //chmod//, debido a que el compilador | + | >No le será necesario cambiar los permisos con //chmod//, debido a que el compilador |
| - | ==== Renombrar el módulo ejecutable==== | + | === Renombrar el módulo ejecutable=== |
| Línea 90: | Línea 96: | ||
| <code bash> | <code bash> | ||
| $ mv a.out hola | $ mv a.out hola | ||
| - | $ hola | + | $ ./hola |
| - | Hola desde main! | + | Hola desde rutina |
| Llamando a subrutina1! | Llamando a subrutina1! | ||
| Línea 110: | Línea 116: | ||
| - | ==== Otorgar 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 '' | ||
| - | Es posible otorgarle al compilador de Fortran un nombre para fichero de salida, en lugar de hacerlo por defecto a '' | + | 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 |
| - | + | ||
| - | No es necesario que la opción **-o** aparezca después del comando | + | |
| <code bash> | <code bash> | ||
| - | $ f77 -o hola.f | + | $ gfortran |
| - | $ hola | + | $ ./hola |
| - | Hola desde main! | + | Hola desde rutina |
| Llamando a subrutina1! | Llamando a subrutina1! | ||
| Línea 141: | Línea 146: | ||
| </ | </ | ||
| - | ==== Producir un listado de Ensamblador==== | + | === 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 | + | Esta opción hace que gfortran |
| Por ejemplo | Por ejemplo | ||
| <code bash> | <code bash> | ||
| - | $f77 -S hola.f | + | $ gfortran |
| - | $ls -c | + | $ ls -c |
| ejemplo.f | ejemplo.f | ||
| hola.c | hola.c | ||
| Línea 161: | Línea 166: | ||
| ==== Rutina Principal y Dos subrutinas en tres ficheros fuente separados==== | ==== Rutina Principal y Dos subrutinas en tres ficheros fuente separados==== | ||
| - | Es posible lograr | + | Ahora lograremos |
| - | <code bash> | + | === Compilar pero no producir un módulo ejecutable=== |
| - | $cat main.f | + | |
| - | | + | |
| - | | + | |
| - | 100 format (' Hola desde main!',/ | + | |
| - | | + | |
| - | 110 format(' | + | |
| - | call sub1 | + | |
| - | | + | |
| - | 120 format(t15' | + | |
| - | | + | |
| - | 130 format(' | + | |
| - | call sub2 | + | |
| - | | + | |
| - | 140 format(t15' | + | |
| - | | + | |
| - | 150 format(' | + | |
| - | end | + | |
| - | $cat sub1.f | + | |
| - | | + | |
| - | | + | |
| - | 200 format(t20,' | + | |
| - | end | + | |
| - | $cat sub2.f | + | |
| - | | + | |
| - | | + | |
| - | 210 format(t20,' | + | |
| - | end | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | ==== Compilar pero no producir un módulo ejecutable==== | + | |
| - | Al usar el programa | + | Para compilar los tres ficheros del ejemplo |
| + | <code bash> | ||
| - | <code bash> | + | La opción **-c** compila, pero no carga los ficheros de código objeto. Esta 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 '' |
| - | **-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 '' | + | Como vemos, el resultado será: |
| <code bash> | <code bash> | ||
| - | $f77 -c main.f sub1.f sub2.f | + | $ gfortran |
| main.f: | main.f: | ||
| MAIN: llamando: | MAIN: llamando: | ||
| Línea 212: | Línea 187: | ||
| sub2.f: | sub2.f: | ||
| sub2: | sub2: | ||
| - | $ls a.out *.o | + | $ ls a.out *.o |
| a.out no encontrado | a.out no encontrado | ||
| main.o | main.o | ||
| Línea 220: | Línea 195: | ||
| </ | </ | ||
| - | 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, '' | + | 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, '' |
| - | ==== Compiladno | + | === Compilar |
| El comando para producir un módulo ejecutable a partir de varios ficheros objeto en este caso sería: | 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 |
| - | $ls -C | + | $ ls -C |
| main.o sub1.o sub2.o a.out | main.o sub1.o sub2.o a.out | ||
| $ | $ | ||
| </ | </ | ||
| + | |||
| + | __Ver También__: [[Tutorial de Compilación en COBOL]] | ||
