next up previous contents
Next: 4.3.2 Correspondencias de tipos Up: 4.3 Enlaces dinámicos Previous: 4.3 Enlaces dinámicos

4.3.1 Funciones de interfaz con C para enlaces dinámicos

Las siguientes funciones están relacionadas con las llamadas a funciones externas escritas en leguaje C y enlazadas dinámicamente con el sistema LE-LISP:

Para ilustrar los pasos necesarios para realizar enlaces dinámicos vamos a suponer que se tiene un módulo llamado toto.c escrito en lenguaje C. Desde el propio entorno LE-LISP podemos compilar toto.c haciando una llamada al shell mediante la utilización del carácter macro !gif:

? !cc -c toto.c
= t

El siguiente paso consiste en enlazar el módulo toto.o al sistema:

? (cload "toto.o")
= (18 . 2684)

La función cload pasa su argumento, sin realizar ningún cambio en él, al editor de enlaces ld. Esto permite emplear cualquier opción válida para ld, incluyendo las que permiten cargar librerías o enlazar a la vez varios módulos. A continuación se muestran dos ejemplos:

En general, la llamada(cload string ) generará la siguiente llamada al aditor de enlacesgif:

ld -A lelispbin -Bstatic -N -x -T fin -o temporal string -lc

donde lelispbin se corresponde con el path que contiene el directorio donde está localizado el binario del sistema LE-LISP que se está ejecutando, fin es la primera dirección disponible en la zona de LE-LISP reservada para código compilado y temporal es un fichero temporal único en el directorio /tmp.

Una vez que se ha realizado el enlace, el fichero temporal contendrá el código del módulo C, que se cargará en la zona code de LE-LISP. Este fichero temporal se utilizará en lugar de lelispbin en las siguientes llamadas a cload. De este modo, se pueden realizar numerosas llamadas a cload para modificar secuencialmente una imagen ejecutable.


next up previous contents
Next: 4.3.2 Correspondencias de tipos Up: 4.3 Enlaces dinámicos Previous: 4.3 Enlaces dinámicos

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997