Programación estruturada en Fortran Librarías 1

Creación dunha
libraría en Fortran

Libraría: código máquina de moitos subprogramas
(en Fortran) empaquetado nun arquivo

on cont!n o código "onte (non se pode depurar ou
ver como opera)#

Proporciónanos subprogramas que permiten "acer
operacións (p#e$#% determinantes% resolución de
sistemas de ecuacións% ###)

Para usar unha libraría% hai que enla&ar (link) o
noso programa coa libraría

' compilador f95 $a usa algunhas librarías
incluídas co compilador (p#e$# "uncións intrínsecas)
Programación estruturada en Fortran Librarías (
Librarías estáticas

Ficheiro con e$tensión .a: libproba.a# )sado só
na compilación:
f95 -L. programa.f90 -lproba

' código máquina da libraría empótrase no
programa e$ecutábel#

on se necesita nada para a e$ecución: a.out

Podemos ver o seu contido: ar tv libproba.a
Programación estruturada en Fortran Librarías *
Librarías dinámicas

Ficheiro con e$tensión .so: libproba.so

' código máquina da libraría +sase na compilación
e na e$ecución:
f95 -L. programa.f90 -lproba
export LD_LIBRARY_PAT ! "LD_LIBRARY_PAT#.
a.o$t

on se pode e$ecutar sen que a variábel de
entorno indique a ruta onde se atopan o(s)
arquivo(s) .so

,er a variábel: echo $LD_LIBRAR_!A"#
Programación estruturada en Fortran Librarías -
Creación dunha libraría
en Fortran

.dición/compilación/depuración de código

Compilación sen enla&ado dos arquivos que
conte0en subprogramas (non incluir o programa
principal)# Crea só arquivos ob$ecto (#o)% non crea
e$ecutábel:
f95 -% ar&$i'o.f90 (crea ar&$i'o.o)

.mpaquetado de arquivos .o e creación de libraría
(libXX.a% debe come&ar por lib)
ar &' lib((.a ).o

Para ver arquivos #o empaquetados: ar t' lib((.a
Programación estruturada en Fortran Librarías 1
Creación dunha libraría
en Fortran

2 recomendábel meter unha "unción ou subrutina
en cada ar&$i'o .o

3lomenos os subprogramas que van ser usados
dende "óra da libraría)

3sí coinciden os nomes dos arquivos .o
empaquetados en lib((.a cos nomes dos
subprogramas que proporciona a libraría

Podemos saber% co comando ar t' lib((.a% os
subprogramas que cont!n esa libraría
Programación estruturada en Fortran Librarías 4
.$emplo de creación e uso
dunha libraría

Libraría libe*tati*ti%a.a que proporcione
subprogramas para calcula5la media% desviación%
mediana e ordear un vector

3rquivos me+ia.f90% desviacion#"67% me+iana.f90%
ordea#"67, prin%ipal.f90 (descárgaos)

Comando de compilación (sen enla&ado):
f95 -% me+ia.f90 +e*'ia%ion.f90 me+iana.f90 or+ea.f90

.mpaquetado da libraría: ar &' libe*tati*ti%a.a ).o

)so da libraría dende programa prin%ipal.f90:
f95 -L. prin%ipal.f90 -le*tati*ti%a
Programación estruturada en Fortran Librarías 8
me+ia.f90 e desviacion.f90
real f$n%tion me+ia-x, n.
real, +imen*ion-n., intent-in. ## x
integer, intent-in. ## n
me+ia!0
+o i!/, n
me+ia!me+ia0x-i.
en+ +o
me+ia!me+ia1n
ret$rn
en+ f$n%tion me+ia
f$n%tion +e*'ia%ion-x, n, me+ia.
real,+imen*ion-n.,intent-in.## x
integer, intent-in. ## n
real, intent-in. ## me+ia
+e*'ia%ion!0
+o i!/, n
2 ! x-i. - me+ia
+e*'ia%ion ! +e*'ia%ion 0 2)2
en+ +o
+e*'ia%ion ! *&rt-+e*'ia%ion1n.
ret$rn
en+ f$n%tion +e*'ia%ion
Programación estruturada en Fortran Librarías 9
me+iana.f90
real f$n%tion me+iana-x, n.
real , +imen*ion-n., intent-in. ## x
integer, intent-in. ## n
%all or+ear-x, n.
if-mo+-n, 3. !! 0. t4en
me+iana ! -x-n13.0x-n130/..13
el*e
me+iana ! x-n130/.
en+if
ret$rn
en+ f$n%tion me+iana
Programación estruturada en Fortran Librarías 6
or+ea.f90
*$bro$tine or+ea-x, n.
real, +imen*ion-n., intent-ino$t. ## x
integer, intent-in. ## n
+o i ! /, n
'min ! x-i.5 imin ! i
+o 6 ! i 0 /, n
if-x-6. 7 'min. t4en
'min ! x-6.5 imin ! 6
en+ if
en+ +o
x-imin. ! x-i.5 x-i. ! 'min
en+ +o
ret$rn
en+ *$bro$tine or+ear
Programación estruturada en Fortran Librarías 17
prin%ipal.f90
program prin%ipal
real, +imen*ion-#., allo%atable ## x
real ## me+ia, me+iana, m
print ), 8intro+$%e n# 8
rea+ ), n
allo%ate-x-n..
print ), 8intro+$%e x# 8
rea+ ), x
2 ! me+ia-x, n.
+ ! +e*'ia%ion-x, n, 2.
m ! me+iana-x, n.
%all or+ear-x, n.
print ), 8me+ia! 8, 2, 8+e*'ia%ion! 8, +, 8me+iana! 8, m
print ), 8'e%tor or+ea+o! 8, x
en+ program prin%ipal
Programación estruturada en Fortran Librarías 11
)so dunha libraría
"eita por outros

I$stalaci%$ da libraría como administrador ou
usuario:

Paquetes precompilados (binarios)% co
s:naptic%apt5get%rpm%###

Compilación do código "onte: %onfig$re%
make% make in*tall (como administrador)

Co0ecer o directorio no que se atopa o(s)
arquivo(s) lib&&.a

3cceder á 'ocume$taci%$ da libraría% para saber
que subprogramas ten% os seus argumentos%
valores retornados% etc#
Programación estruturada en Fortran Librarías 1(
)so dunha libraría

;ende o noso programa% chamamos aos subprogramas
da libraría (ver documentación)% pasándolle os
argumentos a$eitados (en n+mero e tipo) e usando os
valores retornados

Cando co0ecemos o directorio do arquivo lib&&.a:
f95 -L+ir programa.f90 -l((
+ir: directorio no que f95 debe buscar lib((.a
-l((: libXX.a ! a librería que usará programa.f90

Librarías libres en Fortran:
http://<<<#"ortran#com/tools#html

;estacamos: Lapac=% Linpac= (http://<<<#netlib#org)%
Cernlib% Plplot% Libg(