Compilación de una extensión definida por el usuario en C

Antes de empezar

Debe tener una extensión definida por el usuario escrita en C. Puede ser uno de los nodos de ejemplo facilitados que se describen en la sección Archivos de nodos de ejemplo, el analizador de ejemplos que se describe en la sección Archivos de analizadores de ejemplo o bien, un nodo o un analizador que haya creado usted mismo siguiendo las instrucciones que se indican en las secciones Creación de un nodo de proceso de mensajes en C, Creación de un nodo de entrada en C o Creación de un analizador en C. El nombre del nodo de plug-in debe tener el formato <nodename>.lil.

Esta sección proporciona información sobre cómo compilar extensiones definidas por el usuario para todas las plataformas soportadas.

Los nombres de archivos que se emplean en estas instrucciones son los que se suministran en los ejemplos. Si está compilando sus propias extensiones definidas por el usuario, deberá reemplazar estos nombres de archivo por los nombres de archivos propios.

Requisitos previos

Antes de intentar compilar la extensión definida por el usuario, asegúrese de que dispone de un compilador adecuado que esté soportado en su sistema operativo. Algunos ejemplos de compiladores apropiados son:

Para Windows, Microsoft Visual Studio Versión 6.0 (Service Pack 5)

Para AIX, VisualAge C++ for AIX Versión 5.0.2

ParaHP-UX, HP ANSI C 03.37

Para Linux, Linux Versión 2.95.3

Para Solaris, SparcCompiler SC6.2

Paraz/OS, z/OS Versión 1.3 o Versión 1.4

Archivos de cabecera

Las interfaces C están definidas en los archivos de cabecera siguientes:
BipCni.h
Nodos de proceso de mensajes
BipCpi.h
Analizadores de mensajes
BipCci.h
Interfaces comunes a los nodos y a los analizadores
BipCos.h
Definiciones específicas de las plataformas

Las bibliotecas existentes de extensiones definidas por el usuario del cliente o de terceros se ejecutarán en un intermediario de WebSphere Business Integration Message Broker sin modificaciones ni recompilaciones; no obstante, sí que deberá crearlas manualmente en el área de trabajo.

Compilación

La compilación del origen de la extensión definida por el usuario en cada una de las plataformas soportadas crea la biblioteca de implementación cargable (LIL) que el intermedario necessita para implementar la extensón definida por el usuario.

Vaya al directorio donde se encuentra el código de extensión definido por el usuario. Por ejemplo: Inicio del cambio
  cd dir_instalación\sample\extensions\nodes\  (Windows)
 
  cd dir_instalación/sample/extensions/nodes  (plataformas UNIX)
Fin del cambio

Compilación en Windows

Compile el nodo definido por el usuario en Windows (se presupone que es el Compilador C/C++ de 32 bits de Microsoft, disponible en Microsoft Visual Studio C++ Versión 6.0), utilizando el siguiente mandato:
  cl /VERBOSE /LD /MD /Zi /I..\plugin /I..\..\include\plugin
     SwitchNode.c BipSampPluginUtil.c Common.c NodeFactory.c TransformNode.c
     -link /DLL ..\..\lib\imbdfplg.lib
     /OUT:SwitchNode.lil

Compilación en AIX

Compile y enlace el nodo definido por el usuario en AIX tal como se indica a continuación, utilizando un compilador C soportado:
xlc_r -I <dir_instalación>/include
      -I <dir_instalación>/include/plugin
      -c SwitchNode.c
	    -o <outputdir>/SwitchNode.o

xlc_r -I <dir_instalación>/include
      -I <dir_instalación>/include/plugin
      -c BipSampPluginUtil.c
	    -o <outputdir>/BipSampPluginUtil.o

xlc_r -bM:SRE
      -bexpall
      -bnoentry
      -o SwitchNode.lil <outputdir>/SwitchNode.o
         <outputdir>/BipSampPluginUtil.o
      -L <dir_instalación>/lib
      -l imbdfplg

chmod a+r SwitchNode.lil
Inicio del cambio

Compilación en HP-UX

Compile y enlace el nodo definido por el usuario en HP-UX tal como se indica a continuación, utilizando un compilador C soportado:
cc +z \
-I. \
   -I<dir_instalación>/include \
   -I<dir_instalación>/include/plugin \
   -c BipSampPluginUtil.c \
   -o <output_dir>/BipSampPluginUtil.o

cc +z \
-I. \
   -I<dir_instalación>/include \
   -I<dir_instalación>/include/plugin \
   -c Common.c \
   -o <output_dir>/Common.o

cc +z \
-I. \
   -I<dir_instalación>/include \
   -I<dir_instalación>/include/plugin \
   -c NodeFactory.c \
   -o <output_dir>/NodeFactory.o

cc +z \
-I. \
   -I<dir_instalación>/include \
   -I<dir_instalación>/include/plugin \
   -c SwitchNode.c \
   -o <output_dir>/SwitchNode.o

cc +z \
-I. \
   -I<dir_instalación>/include \
   -I<dir_instalación>/include/plugin \
   -c TransformNode.c \
   -o <output_dir>/TransformNode.o


ld -b \
   -o <output_dir>/SwitchNode.lil \
   <output_dir>/BipSampPluginUtil.o \
   <output_dir>/Common.o \
   <output_dir>/NodeFactory.o \
   <output_dir>/SwitchNode.o \
   <output_dir>/TransformNode.o \
   -L <dir_instalación>/lib \
   -L <java_home>/jre/lib/PA_RISC2.0 \
   -L <java_home>/jre/lib/PA_RISC2.0/server \
   -l imbdfplg

chmod a+r <output_dir>/SwitchNode.lil
Fin del cambio
Inicio del cambio

Compilación en Linux

Compile y enlace el nodo definido por el usuario en Linux tal como se indica a continuación, utilizando un compilador C soportado. Observe que las líneas se han partido para facilitar la legibilidad. Entre cada mandato como una única línea de entrada.

/usr/bin/gcc -c -fpic -MD -trigraphs  -I. -I/opt/mqsi/include 
    -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU 
    -D_GNU_SOURCE TransformNode.c
/usr/bin/gcc -c -fpic -MD -trigraphs  -I. -I/opt/mqsi/include 
    -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU 
    -D_GNU_SOURCE SwitchNode.c /usr/bin/gcc -c -fpic -MD -trigraphs  -I. -I/opt/mqsi/include 
    -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU 
    -D_GNU_SOURCE BipSampPluginUtil.c 
/usr/bin/gcc -c -fpic -MD -trigraphs  -I. -I/opt/mqsi/include 
    -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU 
    -D_GNU_SOURCE Common.c 
/usr/bin/gcc -c -fpic -MD -trigraphs  -I. -I/opt/mqsi/include 
    -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU 
    -D_GNU_SOURCE NodeFactory.c
/usr/bin/gcc -o samples.lil 
		TransformNode.o SwitchNode.o BipSampPluginUtil.o Common.o NodeFactory.o 
	  -shared -lc -lnsl -ldl -L/opt/mqsi/lib -limbdfplg 
Estos mandatos crean el archivo samples.lil, que proporciona objetos TransformNode y SwitchNode. Si se produce una excepción en el nodo, éste no se manejará correctamente; el intermediario terminará anormalmente y se reiniciará.
Fin del cambio

Compilación en Solaris

Compile y enlace el nodo definido por el usuario en Solaris tal como se indica a continuación, utilizando un compilador C soportado:
cc -mt \
	-I. \
   -I<dir_instalación>/include \
   -I<dir_instalación>/include/plugin \
   -c SwitchNode.c \
   -o <output_dir>/SwitchNode.o

cc -mt \
	-I. \
   -I<dir_instalación>/include \
   -I<dir_instalación>/include/plugin \
   -c BipSampPluginUtil.c \
   -o <output_dir>/BipSampPluginUtil.o

cc -G \
   -o <output_dir>/SwitchNode.lil \
   		<output_dir>/SwitchNode.o \
   		<output_dir>/BipSampPluginUtil.o \
   -L <dir_instalación>/lib /
   -l imbdfplg

chmod a+r <output_dir>/SwitchNode.lil

Compilación en z/OS

Fuerce al enlace para que utilice el preenlazador o el enlazador estableciendo la variable _CC_STEPS en -1, tal como se indica a continuación:
export _CC_STEPS=-1
De forma alternativa, puede añadir estas dos líneas al archivo makefile, tal como se indica a continuación:
_CC_STEPS=-1
.EXPORT : _CC_STEPS

Compile y enlace el nodo definido por el usuario en z/OS tal como se indica a continuación, utilizando un compilador C soportado:

cc -c \
 -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\) \
 -W0,LIST\(${output_dir}/SwitchNode.lst\) \
 -I./-I${install_dir}/include -I${install_dir}/include/plugin  \
 -I${install_dir}/sample/include \
 -I${install_dir}/sample/plugin \
 -o ${output_dir}/SwitchNode.o \
 ${install_dir}/sample/plugin/SwitchNode.c
cc -c \
 -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\) \
 -W0,LIST\(${output_dir}/BipSampPluginUtil.lst\) \
 -I./-I${install_dir}/include -I${install_dir}/include/plugin  \
 -I${install_dir}/sample/include \
 -I${install_dir}/sample/plugin \
 -o ${output_dir}/BipSampPluginUtil.o \
 ${install_dir}/sample/plugin/BipSampPluginUtil.c
cc \
 -Wl,DLL -g  -Wl,p,map -Wl,LIST=ALL,MAP,XREF,REUS=RENT
-o ${output_dir}/SwitchNode.lil \
${output_dir}/SwitchNode.o ${output_dir}/BipSampPluginUtil.o 
${install_dir}/lib/libimbdfplg.x
chmod a+r {output_dir}/SwitchNode.lil
Nota: -g se convierte en -2 para los buils optimizados.

Conceptos relacionados
Extensiones definidas por el usuario

Tareas relacionadas
Desarrollo de extensiones definidas por el usuario
Creación de la representación de interfaz de usuario de un nodo definido por el usuario en el área de trabajo
Comprobación de un nodo definido por el usuario
Distribución de un nodo definido por el usuario

Referencia relacionada
Extensiones definidas por el usuario