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

Compilar extensiones definidas por el usuario en C para todos los sistemas operativos soportados.

Antes de empezar

Inicio del cambioSi crea sus propios nodos definidos por el usuario, analizadores y salidas de usuario en C, compílelos en el sistema operativo en el que se ejecuta el intermediario de destino. Se proporcionan ejemplos para ambos nodos y analizadores y éstos se describe en Archivos de nodo de ejemplo y Archivos de analizador de ejemplo. Utilice las instrucciones siguientes para compilar los ejemplos. Si desea crea sus propias extensiones, consulte los temas siguientes:Fin del cambio

Inicio del cambioFin del cambio

Estas instrucciones utilizan los nombres de archivo de los ejemplos proporcionados. Si está compilando sus propias extensiones definidas por el usuario, sustituya estos nombres por sus propios nombres de archivo.

Cuando compile una extensión definida por el usuario escrita en C, necesita un compilador compatible. Para obtener detalles sobre los compiladores soportados, consulte Soporte de software opcional.

Archivos de cabecera

Los archivos de cabecera siguientes definen las interfaces en 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

Compilación

Compile el origen para la extensión definida por el usuario en cada una de las plataformas soportadas para crear el archivo ejecutable que el intermediario invoca para implementar la extensión definida por el usuario. En los sistemas Linux y UNIX y z/OS, este archivo es un archivo de biblioteca de implementación (LIL); en los sistemas Windows, es una biblioteca de carga dinámica (DLL).

Inicio del cambioLas bibliotecas que se crean para incluir los nodos definidos por el usuario o analizadores deben tener la extensión .lil en todos los sistemas operativos para que el intermediario los pueda cargar. Las bibliotecas que contienen salidas de usuario deben tener la extensión .lel en todos los sistemas operativos. En los ejemplos de este tema se muestran bibliotecas con la extensión .lil.Fin del cambio

Inicio del cambioConsulte la documentación del compilador que está utilizando para obtener detalles completos de las opciones de compilación y enlace disponibles que pueden ser necesarias para los programas.Fin del cambio

Vaya al directorio en el que está ubicado el código fuente de la extensión definida por el usuario, y siga las instrucciones para su sistema operativo:

Compilación en AIX

Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.

Inicio del cambio
xlc_r -q32 \
   -I. \
   -I/dir_instalación/include/plugin \
   -c SwitchNode.c \
   -o SwitchNode.o

xlc_r -q32 \
   -I. \
   -I/dir_instalación/include/plugin \
   -c BipSampPluginUtil.c \
   -o BipSampPluginUtil.o

xlc_r -q32 \
   -I. \
   -I/dir_instalación/include/plugin \
   -c Common.c \
   -o Common.o

xlc_r -q32 \
   -I. \
   -I/dir_instalación/include/plugin \
   -c NodeFactory.c \
   -o NodeFactory.o

xlc_r -q32 \
      -qmkshrobj \
      -bM:SRE \
      -bexpall \
      -bnoentry \
      -o SwitchNode.lil SwitchNode.o \
         BipSampPluginUtil.o Common.o NodeFactory.o \
      -L /dir_instalación/lib \
      -l imbdfplg

chmod a+r SwitchNode.lil
Fin del cambio

Compilación en HP-UX en PA-RISC

Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.

Inicio del cambio
cc +z -DD32 \
   -I. \
   -I/dir_instalación/include \
   -I/dir_instalación/include/plugin \
   -c BipSampPluginUtil.c \
   -o dir_salida/BipSampPluginUtil.o \
   -Ae

cc +z -DD32 \
   -I. \
   -I/dir_instalación/include \
   -I/dir_instalación/include/plugin \
   -c Common.c \
   -o dir_salida/Common.o \
   -Ae

cc +z -DD32 \
   -I. \
   -I/dir_instalación/include \
   -I/dir_instalación/include/plugin \
   -c NodeFactory.c \
   -o dir_salida/NodeFactory.o \
   -Ae

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

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

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 HP-UX en Itanium

Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.

Inicio del cambio
aCC -O +DD64 -AA -mt +z\
-I. \
   -I/dir_instalación/include \
   -I/dir_instalación/include/plugin \
   -c BipSampPluginUtil.c \
   -o dir_salida/BipSampPluginUtil.o

aCC -O +DD64 -AA -mt +z\
-I. \
   -I/dir_instalación/include \
   -I/dir_instalación/include/plugin \
   -c Common.c \
   -o dir_salida/Common.o

aCC -O +DD64 -AA -mt +z\
-I. \
   -I/dir_instalación/include \
   -I/dir_instalación/include/plugin \
   -c NodeFactory.c \
   -o dir_salida/NodeFactory.o

aCC -O +DD64 -AA -mt +z\
-I. \
   -I/dir_instalación/include \
   -I/dir_instalación/include/plugin \
   -c SwitchNode.c \
   -o dir_salida/SwitchNode.o

aCC -O +DD64 -AA -mt +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/IA64N\
   -L dir_instalación/jre/lib/IA64N/server \
   -l imbdfplg

chmod a+r dir_salida/SwitchNode.lil
Fin del cambio

Compilación en Linux

Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.

/usr/bin/g++ -c -fpic -MD -trigraphs  
   -I. 
   -I/dir_instalación/include 
   -I/dir_instalación/include/plugin  
   -DLINUX -D__USE_GNU -D_GNU_SOURCE 
   TransformNode.c

/usr/bin/g++ -c -fpic -MD -trigraphs  
   -I. 
   -I/opt/mqsi/include 
   -I/dir_instalación/include/plugin 
   -DLINUX -D__USE_GNU -D_GNU_SOURCE 
   SwitchNode.c 

/usr/bin/gcc -c -fpic -MD -trigraphs  
   -I. 
   -I/opt/mqsi/include 
   -I/dir_instalación/include/plugin 
   -DLINUX -D__USE_GNU -D_GNU_SOURCE 
   BipSampPluginUtil.c 

/usr/bin/g++ -c -fpic -MD -trigraphs  
   -I. 
   -I/opt/mqsi/include 
   -I/dir_instalación/include/plugin 
   -DLINUX -D__USE_GNU -D_GNU_SOURCE 
   Common.c 

/usr/bin/g++ -c -fpic -MD -trigraphs  
   -I. 
   -I/opt/mqsi/include 
   -I/dir_instalación/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/dir_instalación/lib -limbdfplg 

Estos mandatos crean el archivo samples.lil que proporciona los objetos TransformNode y SwitchNode.

Para crear la extensión definida por el usuario en C con g++ se requieren algunos cambios; debe definir la función de interfaz como una función de estilo C para el compilador de C++. En el ejemplo siguiente, los elementos ifdefs hacen que su código sea portable, y ocultan las directivas extern "C" de un compilador de Cr.

 #ifdef __cplusplus                                                  
   extern "C"{                                                        
   #endif                                                              
   void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()                                               
   {                                                                   
   ...                                                                 
   ...                                                                 
   }                                                                   
   #ifdef __cplusplus                                                  
   }                                                                   
   #endif                                                        

Compilación en Solaris

Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.

Inicio del cambio
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
Fin del cambio

Compilación en Windows

Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.

Asegúrese de incluir un espacio entre SwitchNode.c y BipSampPluginUtil.c, y también entre -link y /DLL.

Entre el mandato como una sola línea de entrada; en el ejemplo siguiente se han partido las líneas para facilitar su lectura.

Inicio del cambio
cl /VERBOSE /LD /MD /Zi /GX /I. 
   /Idir_instalación\include\plugin 
   SwitchNode.c BipSampPluginUtil.c Common.c 
   NodeFactory.c TransformNode.c 
   -link /DLL dir_instalación\lib\imbdfplg.lib 
   /OUT:SwitchNode.lil
Fin del cambio

Si ha establecido correctamente la variable de entorno LIB, no tiene que especificar las vías de acceso completas a los archivos LIB.

Compilación en z/OS

Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.

Obligue a que su enlace utilice el preenlazador o el enlazador estableciendo la variable _CC_STEPS en -1:
export _CC_STEPS=-1
De forma alternativa, añada estas dos líneas al archivo make (makefile) para exportarlo:
_CC_STEPS=-1
.EXPORT : _CC_STEPS

Para crear compilaciones optimizadas, utilice -2 en lugar de -g en los mandatos siguientes:

cc -c \
 -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,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
cc -c \
 -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,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
cc -c \
 -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,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
cc -c \
 -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL, 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
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

Emita el siguiente mandato para establecer los permisos de archivos de la extensión definida por el usuario en lectura para el grupo y ejecutable:

chmod a+rx {dir_salida}/SwitchNode.lil
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última actualización : 2009-02-16 13:56:19

as10000_