[ATARI] Librerias dinamicas en sistemas Atari
Natalia Portillo
iosglpgc at teleline.es
Mon Dec 30 15:08:03 CET 2002
Hola
> > SE llama SIEMPRE a la libreria por su nombre de archivo. Hasta la
> > fecha no he visto ningun sistema que lo haga de otro modo (*NIX,
> > Windows, OS/2 y Amiga).
>
> Sí, aunque hay maneras y maneras... :)
>
> Por ejemplo, si usas un programa bajo Windows que accede a
> C:\WINNT\SYSTEM32\MSOWS409.DLL (es un decir) y más adelante
> te da por emplear otro programa que accede a la misma
> librería, pero a una versión
> posterior(MSOWS410.DLL) que presumiblemente contiene las
> mismas funciones y alguna otra más (y que debiera ser
> compatible 100% hacia atrás con la
> MSOWS409.DLL) se ve que la cosa no se solucionará simplemente
> cambiando una librería por la otra nueva. ¿Por qué? Por qué
> el programa llama EXPLICITAMENTE a una u otra. Esa es la
> cagada de poner los números de versión como parte integrante
> del nombre de la DLL. Aunque bueno, ahora parece que ya se
> van dando cuenta de esto.
>
> En Amiga la manera de abrir librerías dinámicas se realiza
> mediante la función OpenLibrary(D0,D1) que devuelve el
> puntero a donde sitúa la base de la librería en memoria (como
> en todos los sitios) y le pasas dos parámetros D0 que es el
> nombre de la librería ("intuition.library" por ejemplo) y D1,
> que es el número de versión MINIMO de esa librería necesario
> para que funcione la aplicación. Si la versión de la
> intuition.library fuera la 3, y solicitamos la 5,
> OpenLibrary() devuelve un error. También puede obviarse el
> parámetro D1 (=0), que hará que siempre abra la librería
> independientemente de la versión que tenga...
En Amiga tu mismo lo has dicho, se llama al nombre de la librería. Si mi
programa llama a library.1.0.library, estamos en el mismo problema, no
crees? Tendría que impedirse llamar a las librerias por su nombre de
archivo, sino hacerlas por su nombre interno.
> > Lo que tendria que haber es un sistema que tu pidieses la libreria
> > llamada A (y A no incluye version ni extension ni nada) y
> el sistema
> > la busca en una base de datos de librerias instalads y te
> informa "su
> > version es B" entonces si la version que necesitas es >B
> das error y
> > si <=B la usas. Sencillo, no?
>
> El problema es que lo de las "bases de datos" me recuerda
> irremediablemente al sempiterno "registro de windows". Una
> mole monstruosa de datos (en gran medida inútiles) que se
> cargan al inicio, que la mayoría no se usan para nada y si
> quisieras añadir una librería al sistema deberías reiniciar o
> bien ejecutar alguna orden capaz de actualizar la base de datos.
TODOS los sistemas usan bases de datos. El /proc de *NIX es un bonito
ejemplo de una base de datos en memoria, así como la lista de sistemas
de archivos del VFS de Linux, del IFS de OS/2 y Windows NT, de los
codecs de Windows (que son librerias que no se pueden llamar por su
nombre de archivo, sino que se tienen que llamar por su nombre interno),
etc. Además se podria hacer volatil, es decir, nunca se guardaría,
siempre se haría enumerando las librerías de un directorio protegido por
el sistema para que nada se pueda tocar en el sin pedirlo explicitamente
(asi nadie podria meter una libreria o quitar otra sin que el sistema lo
supiera )
> > > Supongo que Jesús quería dar un ejemplo de la flexibilidad de las
> > > librerías dinámicas, pero en la práctica vemos que no es tan
> > > sencillo, independientemente del sistema. Como bien sabemos pueden
> > > suceder dos cosas, o
> > > las nuevas versiones sustituyen a las antiguas, y una parte
> > > de aplicaciones
> > > dejan de funcionar porque no encuentran la versión que
> > > necesitan, o si quieres
> > > evitar ésto, acabas teniendo un larga lista de librerías,
> > > todas ellas del
> > > mismo tipo pero de diferentes versiones.
>
>
> Hombre esto puede suceder, pero lo lógico sería evitar que no
> sucediese. ¿De que nos sirve tener una librería 0.9 que no es
> compatible al 100% con las funciones de la 0.8? Sencillamente
> para eso, es más cabal usar librerías estáticas...
Hay muchos casos que una libreria estatica es inutil. Vas a compilar
estaticamente los sockets BSD, la pila TCP/IP, etc, en todo programa que
los necesite? Entonces un simple ping ocuparía 4 megas.
More information about the Atari
mailing list