Inicio / Wikis / Tutoriales / Compilar... de verdad - Compilar una unidad de programa

Compilar... de verdad - Compilar una unidad de programa

Tutorial creado por Guillem Borrell. Extraido de: http://torroja.dmt.upm.es:9673/Guillem_Site/Varios/compiladores
05 de Noviembre de 2006
Compresores

3 - Compilar una unidad de programa

Para entenderlo mejor vamos a compilar una unidad de programa, un subroutine. Este archivo va a implementar la ecuación diferencial de un tiro parabólico en dos dimensiones:



         _______

u = -cu \/u2+v2     (1)


            _______

v = -g -cv \/u2+v2     (2)
Obviamente, para encontrar la trayectoria tendremos en cuenta las dos ecuaciones adicionales x=u y y=v.

Para resolver el problema de la forma
x = F( x,t)     (3)
necesitaremos convertir las ecuaciones anteriores en algo de la forma F( x,t) y escribirlo en Fortran 95. Recordemos que ahora no nos interesa el algoritmo, sólo entender qué hace el compilador con la función que escribamos
subroutine tiro_parabolico(neq,t,y,ydot)
!! tiro_parabolico.f90
!! Ecuacion del tiro parabolico con rozamiento
!! en dos dimensiones
!! Se hacen cosas raras con las variables para
!! adaptarse al solver slsode

integer,intent(in) :: neq
real,intent(in) :: t
real,dimension(4),intent(in) :: y
real,dimension(4),intent(out) :: ydot

!! constantes del problema
!! aceleracion de la gravedad
real,parameter :: g=9.8
!! coeficiente de rozamiento
real,parameter :: c=1

ydot(1)=y(3)
ydot(2)=y(4)
ydot(3)=-c*y(3)*sqrt(y(3)**2+y(4)**2)
ydot(4)=-g-c*y(4)*sqrt(y(3)**2+y(4)**2)

end subroutine tiro_parabolico
¿Qué tenemos que hacer para compilar esta subrutina? ¿Cómo podemos compilar una subrutina sin haber definido un programa con anterioridad? ¿Cómo podemos hacerlo sin haber empezado un proyecto?

Cada interfaz gráfica y cada compilador lo hace a su manera. Como ejemplo vamos a utilizar el compilador del proyecto GNU, gfortran3 y el Salford fortran 95 compiler Personal Edition4. El primero es un típico compilador UNIX sin interfaz gráfica mientras que el segundo basa todo su funcionamiento en el IDE5 Plato3. Ambos son gratuitos y muy fáciles de instalar. Aunque los ejemplos se basan en el uso de estos compiladores en concreto todos funcionan de un modo parecido, basta con consultar la documentación.

Para empezar abriremos una consola con: Inicio -> Accesorios -> Símbolo del sistema. Se abrirá el terminal de Windows, eso a lo que los usuarios noveles tienen un miedo irracional. Los comandos son bastante sencillos y siempre es útil saber moverse por ahí. Para aprender a moverse por los directorios basta con este tutorial
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

c:\Documents and Settings\Guillem Borrell\Escritorio> dir
El volumen de la unidad C no tiene etiqueta.
El numero de serie del volumen es: 548A-799A

Directorio de c:\Documents and Settings\Guillem Borrell\Escritorio

13/05/2005 23:03 <DIR> .
13/05/2005 23:03 <DIR> ..
29/09/2005 09:03 <DIR> eclipse
24/07/2005 13:09 <DIR> texmakerwin32-1.2.1
09/12/2005 12:19 707 SciTE.lnk
11/09/2005 20:26 1.754 peret.lnk
19/03/2006 17:27 1.465 Simbolo del sistema.lnk
3 archivos 3.926 bytes
4 dirs 19.424.706.560 bytes libres

c:\Documents and Settings\Guillem Borrell\Escritorio>
dir:
Lista los archivos y directorios del directorio actual
c:\Documents and Settings\Guillem Borrell\Escritorio> cd..
C:\Documents and Settings\Guillem Borrell> dir

El volumen de la unidad C no tiene etiqueta.
El numero de serie del volumen es: 548A-799A

Directorio de C:\Documents and Settings\Guillem Borrell

13/05/2005 23:03 <DIR> .
13/05/2005 23:03 <DIR> ..
13/05/2005 22:21 <DIR> Menu Inicio
19/03/2006 17:11 <DIR> Mis documentos
19/03/2006 17:11 <DIR> Favoritos
15/05/2005 20:56 <DIR> Escritorio

...
C:\Documents and Settings\Guillem Borrell> cd Mis Documentos
C:\Documents and Settings\Guillem Borrell\Mis documentos> dir

El volumen de la unidad C no tiene etiqueta.
El numero de serie del volumen es: 548A-799A

Directorio de C:\Documents and Settings\Guillem Borrell\Mis documentos

13/05/2005 23:03 <DIR> .
13/05/2005 23:03 <DIR> ..
19/03/2006 17:11 <DIR> Mis imagenes
19/03/2006 17:11 <DIR> Mi musica
26/05/2005 21:32 433 Frame1.py

...
cd Mis Documentos:
Entra en el directorio Mis Documentos argumento. Un truco intersante es escribir parte del nombre del directorio y apretar la tecla de tabular; automáticamente Windows va a intentar completar el nombre para que no sea necesario introducirlo entero.
cd..:
Baja un nivel en el árbol de directorios
Ahora que ya sabemos movernos por los directorios iremos en el que se encuentre el archivo tiro_parabolico.f90 del que hemos hablado antes. En mi caso es el directorio Mis Documentos. Ahora tecleamos lo siguiente (para abreviar la consola se expresará con el símbolo >)
> ftn95
[FTN95/Win32 Ver. 4.8.0 Copyright (C) Salford Software Ltd 1993-2005]
*** No source file specified
*** Usage: ftn95 <file-name> [/option [/option ...] ]
*** Or: ftn95 /? for more information on command-line options.
> gfortran
gfortran: no input files
ftn95:
Invoca el compilador Salford Fortran 95
gfortran:
Invoca el compilador GNU Fortran 95
Ahora ya somos capaces de movernos por los directorios y de ejecutar el compilador vamos a convertir nuestro archivo de código fuente en un archivo objeto:
>  ftn95 tiro_parabolico.f90
[FTN95/Win32 Ver. 4.8.0 Copyright (C) Salford Software Ltd 1993-2005]
0008) integer,intent(in) :: neq
WARNING - The argument NEQ has not been used
0009) real,intent(in) :: t
WARNING - The argument T has not been used
NO ERRORS, 2 WARNINGS [<TIRO_PARABOLICO> FTN95/Win32 v4.8.0]
Esta es precisamente el output que los IDEs nos ponen en la ventanita de la parte inferior. Nos avisa de que hay dos variables que no hemos utilizado pero que ha sido capaz de crear el archivo objeto. En el caso del compilador de Salford se llamará tiro_parabolico.obj. El compilador gfortran es un compilador tipo UNIX con lo que la llamada va a ser ligeramente distinta:
> gfortran -c tiro_parabolico.f90
La opción -c pide al compilador que sólo compile, que no intente generar un ejecutable. Vemos además que no nos ha soltado ningún mensaje de aviso aunque deberia haberlo hecho. Si deseamos que el compilador trabaje un poco más con los avisos pasaremos una opción adicional:
> gfortran -c -Wall tiro_parabolico.f90
tiro_parabolico.f90: In function 'tiro_parabolico':
tiro_parabolico.f90:1: warning: unused variable 'neq'
tiro_parabolico.f90:1: warning: unused variable 't'
En ambos casos el compilador GNU Fortran 95 habrá generado un archivo de código objeto llamado tiro_parabolico.o

Nada nos impide poner varias funciones en un mismo archivo de código fuente, tampoco está prohibido poner todo el código de un programa en un único archivo; pero es un buen ejercicio de higiene mental separar todas las unidades de programa para que sean procesadas por separado. Una razón muy importante es porque así sabemos sólo con el nombre del archivo qué unidad de programa contiene.
Valora este capítulo:
Autor y licencia de 'Compilar... de verdad - Compilar una unidad de programa'
Guillem Borrell Extraído de: http://torroja.dmt.upm.es:9673/Guillem_Site/Varios/compiladores

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Compilar... de verdad - Compilar una unidad de programa' (0)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Compilar... de verdad - Compilar una unidad de programa'

Tutorial para configurar y compilar el Kernel, la estructura del sitema operativo GNU/Linux parte del... Más »
La compilación del kernel se hace a la manera Debian, es decir, con herramientas propias... Más »
La unidad Iomega ZIP es una unidad de disco extraíble y de moda. Está disponible... Más »
Este COMO cubre la configuración y uso de la unidad extraíble Iomega JAZ bajo Linux... Más »
En este artículo se explica una sencilla manera para poder escuchar música en formato mp3... Más »
¿Estás seguro de que deseas eliminar este capítulo?