Enlazando funciones de carga dinámica

Después de crear y registrar una función definida por el usuario, el trabajo está prácticamente terminado.Postgres, sim embargo debe cargar el fichero de código objeto (e.g., a .o, o una biblioteca compartida) que implemente esa funcuín. Como se ha mencionado anteriormente, Postgres carga el código en tiempo de ejecución, a medida que es necesario. A fin de permitir que el código sea cargado dinámicamente, puede tener que compilar y enlazar este código de algún modo especial. esta sección explica brevemente como realizar la compilación y el enlazado necesario antes de que pueda cargar sus funciones en un servidor Postgres en ejecución. Nótese que este proceso ha cambiado respecto al de la versión 4.2.

Debe estar preparado para leer (y releer, y re-releer) las páginas de manual del compilador de C, cc(1), y del enlazador, ld(1), por si necesita información específica. Además, los paquetes de prueba de regresión del directorio PGROOT/src/regress contienen varios ejemplos de estwe proceso. Si comprende lo que realizan estas pruebas, no debería tener ningún problema.

La siguiente terminología se usará más adelante:

Las siguientes restricciones generales y notas se aplican también al texto siguiente:

ULTRIX

Es muy facil escribir ficheros objeto de carga dinámica bajo ULTRIX. ULTRIX no tiene ningún mecanismo para bibliotecas compartidas, y por lo tanto, no plantea restricciones a la interfase del cargador dinámico. Por otra parte, tendremos que (re)escribir un cargador dinámico no portable, y no podremos usar verdaderas bibliotecas compartidas. Bajo ULTRIX, la unica restriccion es que debe producir cada fichero objeto con la opcion -G 0. (Nótese que es trata del número 0, no del literal "o"). Por ejemplo:

# simple ULTRIX example
% cc -G 0 -c foo.c
    
produce un fichero objeto llamado foo.o que puede ser cargado dinámicamente en Postgres . No ha de realizarse carga o enlazado adicional.