Compilar extensiones definidas por el usuario en C para todos los sistemas operativos soportados.
Si 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:
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.
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).
Las 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.
Consulte 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.
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:
Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.
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
Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.
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
Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.
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
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
Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.
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
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.
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
Si ha establecido correctamente la variable de entorno LIB, no tiene que especificar las vías de acceso completas a los archivos LIB.
Cuando compile una extensión definida por el usuario que está escrita en C, utilice un compilador soportado.
export _CC_STEPS=-1De 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