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

Antes de empezar

Debe tener una extensión definida por el usuario escrita en C. Puede ser uno de los nodos de ejemplo proporcionados que se describen en el apartado Archivos de nodo de ejemplo, el analizador de ejemplo que se describe en el apartado Archivos de analizador de ejemplo o un nodo o analizador que haya creado el usuario utilizando las instrucciones del apartado Creación de un nodo de proceso de mensajes o de salida en C, Creación de un nodo de entrada en C o Creación de un analizador en C. El nombre del nodo definido por el usuario debe tener el formato <nombrenodo>.lil.

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

Los nombres de archivo utilizados en estas instrucciones son los de los ejemplos proporcionados. Si está compilando sus propias extensiones definidas por el usuario, deberá sustituir estos nombres de archivo por sus propios nombres de archivo.

Requisitos previos

Antes de intentar compilar la extensión definida por el usuario, asegúrese de tener un compilador apropiado soportado por el sistema operativo. Los compiladores siguientes son apropiados:

Inicio del cambioPara Windows, Microsoft Visual C++ .NET 2003Fin del cambio

Inicio del cambioPara AIX, VisualAge C++ para AIX Versión 6.0Fin del cambio

Inicio del cambioFor HP-UX, HP ANSI C 03.52Fin del cambio

Inicio del cambioPara Linux (plataforma x86) y Linux (plataforma zSeries) 2.4 Kernel y 2.6 Kernel, Gnu g++, versión mínima 3.2Fin del cambio

Inicio del cambioPara Linux (plataforma POWER), Gnu g++, versión mínima 3.3Fin del cambio

Inicio del cambioPara Solaris SPARC:
  • Sun ONE Studio 7, Enterprise Edition para Solaris
  • Sun ONE Studio 8, Compiler Collection
Fin del cambio

Inicio del cambioPara Solaris x86-64, Sun Studio 10Fin del cambio

Inicio del cambioPara z/OS Language Environment (LE) z/OS 1.5, z/OS 1.6, z/OS C/C++ 1.5 o superiorFin del cambio

Archivos de cabecera

Los siguientes archivos de cabecera definen las interfaces C:
BipCni.h
Nodos de proceso de mensajes
BipCpi.h
Analizadores de mensajes
BipCci.h
Interfaces comunes a nodos y analizadores
BipCos.h
Definiciones específicas de plataforma

Aunque las bibliotecas de extensiones existentes definidas por el usuario proporcionadas por el cliente o por terceros se ejecuten en un intermediario de WebSphere Message Broker sin realizar ninguna modificación o recompilación, tendrá que crearlas manualmente en el área de trabajo.

Compilación

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

Vaya al directorio donde está ubicado el código de extensión definida por el usuario. Por ejemplo:
cd dir_instalación\sample\extensions\nodes\ (Windows)
 
cd dir_instalación/sample/extensions/nodes
(plataformas Linux y
UNIX)

Compilación en Windows

Compile el nodo definido por el usuario en Windows (suponiendo que se utiliza el Compilador C/C++ de 32 bits de Microsoft, disponible en Microsoft Visual Studio C++ Versión 7.1), utilizando el mandato:
cl /VERBOSE /LD /MD /Zi /I. /I..\..\..\include\plugin SwitchNode.c
BipSampPluginUtil.c Common.c NodeFactory.c TransformNode.c -link
/DLL ..\..\..\lib\imbdfplg.lib /OUT:SwitchNode.lil
Nota: Debido a la longitud de este mandato, ha sido necesario mostrarlo partido en varias líneas. Cuando entre el mandato, asegúrese de que incluye un espacio entre SwitchNode.c y BipSampPluginUtil.c, y también entre -link y /DLL.

Compilación en AIX

Utilizando un compilador C soportado, compile y enlace el nodo definido por el usuario en AIX como se indica a continuación:
xlc_r \
-I. \
-I /opt/IBM/mqsi/6.0/include/plugin \
-c SwitchNode.c \
-o SwitchNode.o
xlc_r \
-I. \
-I /opt/IBM/mqsi/6.0/include/plugin \
-c BipSampPluginUtil.c \
-o BipSampPluginUtil.o
xlc_r \
-I. \
-I /opt/IBM/mqsi/6.0/include/plugin \
-c Common.c \
-o Common.o
xlc_r \
-I. \
-I /opt/IBM/mqsi/6.0/include/plugin \
-c NodeFactory.c \
-o NodeFactory.o
xlc_r -qmkshrobj \
-bM:SRE \
-bexpall \
-bnoentry \
-o SwitchNode.lil SwitchNode.o BipSampPluginUtil.o Common.o NodeFactory.o \
-L /opt/IBM/mqsi/6.0/lib
-l imbdfplg
chmod a+r SwitchNode.lil

Compilación en HP-UX

Utilizando un compilador C soportado, compile y enlace el nodo definido por el usuario en HP-UX como se indica a continuación: Inicio del cambio
cc +z \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c BipSampPluginUtil.c \
-o <dir_salida>/BipSampPluginUtil.o
cc +z \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c Common.c \
-o <dir_salida>/Common.o
cc +z \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c NodeFactory.c \
-o <dir_salida>/NodeFactory.o
cc +z \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c SwitchNode.c \
-o <dir_salida>/SwitchNode.o
cc +z \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c TransformNode.c \
-o <dir_salida>/TransformNode.o
ld -b \
-o <dir_salida>/SwitchNode.lil \
<dir_salida>/BipSampPluginUtil.o \
<dir_salida>/Common.o \
<dir_salida>/NodeFactory.o \
<dir_salida>/SwitchNode.o \
<dir_salida>/TransformNode.o \
-L <dir_instalación>/lib \
-L <dir_instalación>/xml4c/lib \
-L <dir_instalación>/merant/lib \
-L <dir_instalación>/jre/lib/PA_RISC2.0 \
-L <dir_instalación>/jre/lib/PA_RISC2.0/server \
-l imbdfplg
chmod a+r <dir_salida>/SwitchNode.lil
Fin del cambio

Compilación en Linux

Utilizando un compilador C soportado, compile y enlace el nodo definido por el usuario en Linux como se indica a continuación. Tenga en cuenta que las líneas se han partido para facilitar la lectura. Entre cada mandato como una sola línea de entrada.

Inicio del cambio
/usr/bin/g++ -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/g++ -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/g++ -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/g++ -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/g++ -o samples.lil
		TransformNode.o SwitchNode.o BipSampPluginUtil.o Common.o NodeFactory.o
-shared -lc -lnsl -ldl -L/opt/mqsi/lib -limbdfplg
Fin del cambio Estos mandatos crean el archivo samples.lil, que proporciona los objetos TransformNode y SwitchNode. Si se produce una excepción en el nodo, ésta no se maneja correctamente y el intermediario termina anormalmente y se reinicia.

Compilación en Solaris

Utilizando un compilador C soportado, compile y enlace el nodo definido por el usuario en Solaris como se indica a continuación:
cc -mt \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c SwitchNode.c \
-o <dir_salida>/SwitchNode.o
cc -mt \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c BipSampPluginUtil.c \
-o <dir_salida>/BipSampPluginUtil.o
cc -mt \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c NodeFactory.c \
-o <dir_salida>/NodeFactory.o
cc -mt \
-I. \
-I<dir_instalación>/include \
-I<dir_instalación>/include/plugin \
-c Common.c \
-o <dir_salida>/Common.o
cc -G \
-o <dir_salida>/SwitchNode.lil \
<dir_salida>/SwitchNode.o \
<dir_salida>/BipSampPluginUtil.o \
<dir_salida>/NodeFactory.o \
<dir_salida>/Common.o \
-L <dir_instalación>/lib /
-l imbdfplg
chmod a+r <dir_salida>/SwitchNode.lil

Compilación en z/OS

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

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

Inicio del cambio
cc -c \
-Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \
-Wc,xplink \
-W0,LIST\(./SwitchNode.lst\) \
-I. -I${dir_instalación}/include \
-I${dir_instalación}/include/plugin \
-I${dir_instalación}/sample/include \
-I${dir_instalación}/sample/plugin \
-o ./SwitchNode.o ./SwitchNode.c
Fin del cambio Inicio del cambio
cc -c \
-Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \
-Wc,xplink \
-W0,LIST\(./SwitchNode.lst\) \
-I. -I${dir_instalación}/include \
-I${dir_instalación}/include/plugin \
-I${dir_instalación}/sample/include \
-I${dir_instalación}/sample/plugin \
-o ./BipSampPluginUtil.o ./BipSampPluginUtil.c
Fin del cambio Inicio del cambio
cc -c \
-Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \
-Wc,xplink \
-W0,LIST\(./SwitchNode.lst\) \
-I. -I${dir_instalación}/include \
-I${dir_instalación}/include/plugin \
-I${dir_instalación}/sample/include \
-I${dir_instalación}/sample/plugin \
-o ./Common.o ./Common.c
Fin del cambio Inicio del cambio
cc -c \
-Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \
-Wc,xplink \
-W0,LIST\(./SwitchNode.lst\) \
-I. -I${dir_instalación}/include \
-I${dir_instalación}/include/plugin \
-I${dir_instalación}/sample/include \
-I${dir_instalación}/sample/plugin \
-o ./NodeFactory.o ./NodeFactory.c
Fin del cambio Inicio del cambio
cc \
-Wl,DLL -g  -Wl,p,map -Wl,LIST=ALL,MAP,XREF,REUS=RENT \
-Wl,xplink \
-o ./SwitchNode.lil ./SwitchNode.o ./BipSampPluginUtil.o \
./Common.o ./NodeFactory.o \
${dir_instalación}/lib/libimbdfplg.x
Fin del cambio

Establezca los permisos de la extensión definida por el usuario en lectura y ejecución para grupo emitiendo el siguiente mandato:

chmod a+rx {dir_salida}/SwitchNode.lil
Nota: -g se convierte en -2 para construcciones optimizadas.
Conceptos relacionados
Extensiones definidas por el usuario
Referencia relacionada
Extensiones definidas por el usuario
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 04/05/2006
as10000_