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 05:53] – 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====== |
| - | ====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 | + | Este tutorial enseña los rudimentos de la compilación de programas |
| - | - 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]] | + | ====Programa |
| - | <code fortran> | + | Existen varias convenciones para usar el compilador de Fortran. Estas son: |
| - | program | + | |
| + | - El nombre del fichero que contiene el código fuente en fortran debe terminar con '' | ||
| + | - El compilador se invoca con '' | ||
| + | - El compilador tiene varias opciones disponibles (**-c**, **-o**, **-p**, **-S**) | ||
| + | - Se hacen preconexiones para //stdin// y // | ||
| + | |||
| + | Este es el ejemplo [[hola.f]] de código fuente de Fortran que se utilizará: | ||
| + | |||
| + | |||
| + | <file fortran | ||
| + | program | ||
| write(6, | write(6, | ||
| - | 100 | + | 100 |
| write(6, | write(6, | ||
| - | 110 | + | 110 |
| call sub1 | call sub1 | ||
| write(6, | write(6, | ||
| - | 120 | + | 120 |
| write(6, | write(6, | ||
| - | 130 | + | 130 |
| call sub2 | call sub2 | ||
| write(6, | write(6, | ||
| - | 140 | + | 140 |
| write(6, | write(6, | ||
| - | 150 | + | 150 |
| end | end | ||
| subroutine sub1 | subroutine sub1 | ||
| write(6, | write(6, | ||
| - | 200 | + | 200 |
| end | end | ||
| subroutine sub2 | subroutine sub2 | ||
| write(6, | write(6, | ||
| - | 210 | + | 210 |
| end | end | ||
| - | </code> | + | </file> |
| - | ==== | + | === |
| + | Para compilar el programa '' | ||
| - | El compilador FORTRAN se incova con: | + | <code bash> |
| + | gfortran hola.f | ||
| + | </ | ||
| + | Si no provee opciones, gfortran aceptará código fuente Fortran o programas en lenguaje ensamblador que sigan las convenciones delineadas anteriormente. Compilará, ensamblará, | ||
| - | Command Format: | + | <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</ | + | 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á, | + | 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! | + | |
| $ | $ | ||
| </ | </ | ||
| + | El fichero '' | ||
| - | 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 - leer, escribir, 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 | |
| - | 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 |
| - | Calling function1! | + | Llamando a subrutina1! |
| - | Hello from function1! | + | Hola desde subrutina1! |
| - | | + | |
| - | Calling function2! | + | Llamando a subrutina2! |
| - | Hello from function2! | + | Hola desde subrutina2! |
| - | | + | |
| - | That's all! | + | Eso es todo, amigos! |
| $ | $ | ||
| </ | </ | ||
| - | ==== | + | === |
| + | Es posible otorgarle al compilador gfortran un nombre para fichero de salida, en lugar de hacerlo por defecto a '' | ||
| - | Es posible tener la salida | + | 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, '' | ||
| - | Command Format: | ||
| - | output - the name of the executable file | + | <code bash> |
| - | | + | $ gfortran |
| + | $ ./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: | + | |
| - | 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! | + | |
| $ | $ | ||
| </ | </ | ||
| - | ==== 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: | + | |
| - | -S = Compile only | + | |
| + | Esta opción hace que gfortran compile programas de Fortran y disponga los programas de código ensamblador en un ficherode | ||
| - | Sample Session: | + | Por ejemplo |
| <code bash> | <code bash> | ||
| - | $f77 -S | + | $ gfortran |
| - | $ls -c | + | $ ls -c |
| - | example.f hello hex.c | + | ejemplo.f hola |
| - | hello.c hello.s multiply.c | + | hola.c hola.s |
| $ | $ | ||
| </ | </ | ||
| - | El fichero hola.s | + | El fichero |
| - | ==== Rutina Principal y Dos subrutinas en tres ficheros | + | ==== Rutina Principal y Dos subrutinas en tres ficheros |
| + | 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=== | ||
| - | <code bash> | + | Para compilar los tres ficheros del ejemplo anterior |
| - | $cat main.f | + | |
| - | | + | |
| - | write(6,100) | + | |
| - | 100 format (' Hello from 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 | + | |
| - | + | ||
| - | Al usar el programa anterior, el siguiente comando | + | |
| + | <code bash> | ||
| - | Command Format: | + | 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 = Compile, but do not load object files. | + | Como vemos, el resultado será: |
| <code bash> | <code bash> | ||
| - | $f77 -c main.f sub1.f sub2.f | + | $ gfortran |
| main.f: | main.f: | ||
| - | | + | |
| 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 243: | 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, main.o, sub1.o sub2.o) que pueden | + | La opción |
| - | ==== Compiladno | + | === Compilar |
| - | + | ||
| - | El comando para producir un módulo ejecutable a partir de varios ficheros objeto es la siguiente manera: | + | |
| - | + | ||
| - | + | ||
| - | Command Format: | + | |
| - | 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 |
| - | $ls -C | + | $ ls -C |
| - | funct1.o funct2.o hello.o | + | main.o sub1.o sub2.o a.out |
| $ | $ | ||
| </ | </ | ||
| + | |||
| + | __Ver También__: [[Tutorial de Compilación en COBOL]] | ||
