Compilar... De verdad - Manejar archivos objeto

4 - Manejar archivos objeto

Tutorial creado por Guillem Borrell. Extraido de: http://torroja.dmt.upm.es:9673/Guillem_Site/Varios/compiladores
05 de Noviembre de 2006
Los archivos de código compilado o archivos objeto son útiles de modo completamente independiente. Gracias a la existencia de archivos objeto existen las bibliotecas, en inglés libraries. A todo el mundo le suenan esos archivos con la extensión .dll. Estas librarías no serían posibles si los procesos de compilación y enlazado no fueran independientes.

Supongamos que nos dicen que no tenemos que escribir la subrutina de integración de la ecuación diferencial, que utilicemos las subrutinas LSODE. Son integradores de paso variable escritos por los desarrolladores del Lawrence Livermore National Laboratory del Departamento de Energía de los Estados Unidos. Además nos dicen que no tenemos que compilarlo, que alguien lo ha hecho previamente con mucho cuidado para que tenga un rendimiento máximo. ¿Qué nos dan entonces? no nos dan una subrutina llamada slsode.f sino archivo llamad slsode.obj por si utilizamos el compilador de Salford y otro llamado slsode.o por si utilizamos el de GNU. Deben proporcionarnos dos archivos objeto distintos porque los dos compiladores no son compatibles. Podría darse el caso que lo fueran con lo que bastaría con un único archivo objeto6.

Además nos pasan un manual de cómo utilizar la subrutina y escribimos finalmente el programa que resuelve el problema en poblematiro.f90
program problematiro

implicit none

external tiro_parabolico

!! Parametros de configuracion de lsode

integer, parameter :: neq=4
integer, parameter :: iopt=0
integer, parameter :: itol=1
integer, parameter :: itask=1
integer, dimension(20) :: iwork
integer :: liw=20
integer, dimension(20+16*neq) :: rwork
integer :: lrw=20+16*neq

integer :: istate=1
integer :: mf=10 ! Adams nonstiff method

!! Configuracion del problema
integer,parameter :: nitmax=1000

!! Errores
real :: rtol=1.e-6
real :: atol=1.e-6
real, dimension(4) :: y
real :: t,tout,dt=.1

integer :: i

y(1)=0.
y(2)=0.
y(3)=10.
y(4)=10.

write(*,*) 'coord. x - ','coord. y - ','veloc. u - ','veloc. v - ','tiempo'
do i=1,nitmax
tout=t+dt
call slsode(tiro_parabolico,neq,y,t,tout,itol,rtol,atol,itask,&
& istate,iopt,rwork,lrw,iwork,liw,'dummy',mf)
write(*,*) y(1),y(2),y(3),y(4),t
!! Condicion de parada es la llegada al suelo
if (y(2)<0) exit
end do

end program problematiro
Una vez hayamos convertido esta unidad de programa tipo program en otro archivo de código objeto ya tenemos todo lo necesario para crear el programa que resuelve el tiro parabólico

Sé el primero en opinar


Tutoriales relacionados con 'Compilar... De verdad'

Ni los cursos de programación ni los Entornos de Desarrollo permiten conocer algunos conceptos tanto... Más »
Este documento describe la puesta en marcha y mantenimiento de noticias de Usenet bajo Linux.... Más »
Rpm
Este documento describe el uso del formato de paquetes de instalación que se ha convertido... Más »
El Linux Benchmarking CÓMO trata sobre algunos aspectos asociados con el benchmarking en los sistemas... Más »
Debian es el nombre de una organización dedicada al desarrollo y mantenimiento de sistemas operativos... Más »

Autor y licencia de 'Compilar... De verdad'


Tutorial de Guillem Borrell. Extraido de: http://torroja.dmt.upm.es:9673/Guillem_Site/Varios/compiladores CopyLeft
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.