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:05] – 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: | + | 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 '' | - 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 '' | ||
| + | <code bash> | ||
| + | gfortran hola.f | ||
| + | </ | ||
| - | Para compilar el programa hola.f | + | Si no provee opciones, gfortran aceptará código fuente Fortran o programas |
| - | <code bash>f77 hola.f</ | ||
| - | Si no se proveen opciones, f77 acepta código fuente FORTRAN y programas en lenguaje ensamblador que sigan las convenciones delineadas anteriormente. Compilará, ensamblará, | + | <code bash> |
| - | + | $ gfortran | |
| - | + | $ ./a.out | |
| - | <ocde bash> | + | Hola desde rutina |
| - | $f77 hola.f | + | |
| - | $a.out | + | |
| - | Hola desde main! | + | |
| Llamando a subrutina1! | Llamando a subrutina1! | ||
| Línea 74: | Línea 78: | ||
| </ | </ | ||
| + | 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 |
| - | Hola desde main! | + | Hola desde rutina |
| Llamando a subrutina1! | Llamando a subrutina1! | ||
| Línea 113: | Línea 116: | ||
| - | ==== | + | === |
| + | 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 | ||
| - | 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. | ||
| - | |||
| - | Sample Session: | ||
| <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 152: | Línea 146: | ||
| </ | </ | ||
| - | ==== Producir un listado de Ensamblador==== | + | === Producir un listado de Ensamblador === |
| - | Esta opción hace que f77 compile programas de fortran | + | Esta opción hace que gfortran |
| - | + | Por ejemplo | |
| - | Command Format: | + | |
| - | -S = Compile only | + | |
| - | + | ||
| - | + | ||
| - | Sample Session: | + | |
| <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 |
| - | + | ||
| - | + | ||
| - | + | ||
| - | <code bash> | + | |
| - | $cat main.f | + | |
| - | | + | |
| - | | + | |
| - | 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 | + | |
| - | </ | + | |
| + | 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 | + | Para compilar los tres ficheros del ejemplo |
| + | <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: | ||
| 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: | ||
| </ | </ | ||
| - | 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]] | ||
