Prima di iniziare
E' necessario disporre di un'estensione definita dall'utente in C. Questa può essere uno dei nodi di esempio forniti descritti in File di nodi di esempio, il programma di analisi di esempio descritto in File di programmi di analisi di esempio oppure un nodo o un programma di analisi che è stato creato utilizzando le istruzioni in Creazione di un nodo di output o di elaborazione messaggi in C, Creazione di un nodo di input in C o Creazione di un programma di analisi in C. Il nome del nodo definito dall'utente deve essere nel formato <nomenodo>.lil.
Questa sezione fornisce informazioni su come compilare estensioni definite dall'utente per tutte le piattaforme supportate.
I nomi file utilizzati in queste istruzioni sono quelli degli esempi forniti. Se si stanno compilando proprie estensioni definite dall'utente, è necessario sostituire tali nomi file con i nomi dei propri file.
Prima di tentare di compilare la propria estensione definita dall'utente, accertarsi di disporre di un compilatore supportato dal sistema operativo in uso. Esempi di compilatori appropriati sono:
Per Windows, Microsoft Visual C++ .NET 2003
Per AIX, VisualAge C++ per AIX Versione 6.0
Per HP-UX, HP ANSI C 03.52
Per Linux (piattaforma x86) e Linux (piattaforma zSeries) 2.4 Kernel e 2.6 Kernel, Gnu g++, a partire dalla versione 3.2
Per Linux (piattaforma POWER), Gnu g++, a partire dalla versione 3.3
Per Solaris x86-64, Sun Studio 10
Per z/OS LE (Language Environment) z/OS 1.5, z/OS 1.6, z/OS C/C++ 1.5 o versioni successive
Le esistenti librerie di estensioni definite dall'utente fornite da terze parti o da clienti vengono eseguite su un broker WebSphere Message Broker senza alcuna modifica o ricompilazione; tuttavia, è necessario crearle manualmente nel workbench.
Mediante la compilazione dell'origine per l'estensione definita dall'utente su ognuna delle piattaforme supportate, viene creato il file LIL (Loadable Implementation Library) necessario al broker per implementare l'estensione definita dall'utente.
cd install_dir\sample\extensions\nodes\ (Windows) cd install_dir/sample/extensions/nodes (piattaforme Linux e UNIX)
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
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
cc +z \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c BipSampPluginUtil.c \ -o <output_dir>/BipSampPluginUtil.o cc +z \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c Common.c \ -o <output_dir>/Common.o cc +z \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c NodeFactory.c \ -o <output_dir>/NodeFactory.o cc +z \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c SwitchNode.c \ -o <output_dir>/SwitchNode.o cc +z \ -I. \ -I<install_dir>/include \ -I<install_dir>/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 <install_dir>/lib \ -L <install_dir>/xml4c/lib \ -L <install_dir>/merant/lib \ -L <install_dir>/jre/lib/PA_RISC2.0 \ -L <install_dir>/jre/lib/PA_RISC2.0/server \ -l imbdfplg chmod a+r <output_dir>/SwitchNode.lil
Compilare ed eseguire il link del nodo definito dall'utente su Linux come riportato di seguito, utilizzando un compilatore C supportato. Tenere presente che le righe sono state suddivise per migliorare la leggibilità. Immettere ciascun comando come una singola riga di input.
/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 -limbdfplgQuesti comandi creano il file samples.lil, che fornisce gli oggetti TransformNode e SwitchNode.
#ifdef __cplusplus extern "C"{ #endif void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { ... ... } #ifdef __cplusplus } #endif
cc -mt \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c SwitchNode.c \ -o <output_dir>/SwitchNode.o cc -mt \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c BipSampPluginUtil.c \ -o <output_dir>/BipSampPluginUtil.o cc -mt \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c NodeFactory.c \ -o <output_dir>/NodeFactory.o cc -mt \ -I. \ -I<install_dir>/include \ -I<install_dir>/include/plugin \ -c Common.c \ -o <output_dir>/Common.o cc -G \ -o <output_dir>/SwitchNode.lil \ <output_dir>/SwitchNode.o \ <output_dir>/BipSampPluginUtil.o \ <output_dir>/NodeFactory.o \ <output_dir>/Common.o \ -L <install_dir>/lib / -l imbdfplg chmod a+r <output_dir>/SwitchNode.lil
export _CC_STEPS=-1In alternativa, è possibile aggiungere queste due righe al file per esportarlo, come riportato di seguito:
_CC_STEPS=-1 .EXPORT : _CC_STEPS
Compilare ed eseguire il link del nodo definito dall'utente su z/OS come riportato di seguito, utilizzando un compilatore C supportato:
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/sample/plugin \ -o ./SwitchNode.o ./SwitchNode.c
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/sample/plugin \ -o ./BipSampPluginUtil.o ./BipSampPluginUtil.c
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/sample/plugin \ -o ./Common.o ./Common.c
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${install_dir}/include \ -I${install_dir}/include/plugin \ -I${install_dir}/sample/include \ -I${install_dir}/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 \ ${install_dir}/lib/libimbdfplg.x
Impostare le autorizzazioni del file dell'estensione definita dall'utente su esecuzione e lettura gruppi immettendo il seguente comando:
chmod a+rx {output_dir}/SwitchNode.lil