Compile user-defined extensions in C for all supported operating systems.
If
you create your own user-defined nodes, parsers, and user exits in
C, compile them on the operating system on which the target broker
is running. Samples are provided for both nodes and parsers, and are
described in Sample node files and Sample parser files. Use the instructions
here to compile the samples. If you want to create your own extensions,
see the following topics:
These instructions use the file names of the supplied samples. If you are compiling your own user-defined extensions, substitute your own file names.
When you compile a user-defined extension that is written in C, you need a compatible compiler. For details of supported compilers, see Optional software support.
Compile the source for your user-defined extension on each of the supported operating systems to create the executable file that the broker calls to implement your user-defined extension. On Linux®, UNIX®, and z/OS® systems, this file is a loadable implementation library file (LIL); on Windows® systems, it is a dynamic load library (DLL).
The libraries that you build to
contain user-defined nodes or parsers must have the extension .lil on
all operating systems so that the broker can load them. Libraries
that contain user exits must have the extension .lel on
all operating systems. The examples in this topic show libraries with
the extension .lil.
Refer to
the documentation for the compiler that you are using for full details
of available compile and link options that might be required for your
programs.
Navigate to the directory where your user-defined extension source code is located, and follow the instructions for your operating system:
When you compile a user-defined extension that is written in C, use a supported compiler.
xlc_r -q32 \ -I. \ -I/install_dir/include/plugin \ -c SwitchNode.c \ -o SwitchNode.o xlc_r -q32 \ -I. \ -I/install_dir/include/plugin \ -c BipSampPluginUtil.c \ -o BipSampPluginUtil.o xlc_r -q32 \ -I. \ -I/install_dir/include/plugin \ -c Common.c \ -o Common.o xlc_r -q32 \ -I. \ -I/install_dir/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 /install_dir/lib \ -l imbdfplg chmod a+r SwitchNode.lil
When you compile a user-defined extension that is written in C, use a supported compiler.
cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c BipSampPluginUtil.c \ -o output_dir/BipSampPluginUtil.o \ -Ae cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c Common.c \ -o output_dir/Common.o \ -Ae cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c NodeFactory.c \ -o output_dir/NodeFactory.o \ -Ae cc +z -DD32 \ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c SwitchNode.c \ -o output_dir/SwitchNode.o \ -Ae cc +z -DD32\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c TransformNode.c \ -o output_dir/TransformNode.o \ -Ae 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
When you compile a user-defined extension that is written in C, use a supported compiler.
aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c BipSampPluginUtil.c \ -o output_dir/BipSampPluginUtil.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c Common.c \ -o output_dir/Common.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c NodeFactory.c \ -o output_dir/NodeFactory.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/install_dir/include \ -I/install_dir/include/plugin \ -c SwitchNode.c \ -o output_dir/SwitchNode.o aCC -O +DD64 -AA -mt +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/IA64N\ -L install_dir/jre/lib/IA64N/server \ -l imbdfplg chmod a+r output_dir/SwitchNode.lil
When you compile a user-defined extension that is written in C, use a supported compiler.
/usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/install_dir/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE TransformNode.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE SwitchNode.c /usr/bin/gcc -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE BipSampPluginUtil.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE Common.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/install_dir/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/install_dir/lib -limbdfplg
These commands create the file samples.lil that provides TransformNode and SwitchNode objects.
Building the C user-defined extension with g++ requires some changes; you must define the interface function as a C-style function to the C++ compiler. In the following example, the ifdefs keep your code portable, and hide the extern "C" directives from a C compiler.
#ifdef __cplusplus extern "C" { #endif void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { ... ... } #ifdef __cplusplus } #endif
When you compile a user-defined extension that is written in C, use a supported compiler.
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
When you compile a user-defined extension that is written in C, use a supported compiler.
Ensure that you include a space between SwitchNode.c and BipSampPluginUtil.c, and also between -link and /DLL.
Enter the command as a single line of input; in the following example the lines have been split to improve readability.
cl /VERBOSE /LD /MD /Zi /GX /I. /Iinstall_dir\include\plugin SwitchNode.c BipSampPluginUtil.c Common.c NodeFactory.c TransformNode.c -link /DLL install_dir\lib\imbdfplg.lib /OUT:SwitchNode.lil
If you have correctly set the LIB environment variable, you do not have to specify the full paths to the LIB files.
When you compile a user-defined extension that is written in C, use a supported compiler.
export _CC_STEPS=-1Alternatively, add these two lines to your makefile to export it:
_CC_STEPS=-1 .EXPORT : _CC_STEPS
To create optimized builds, use -2 in place of -g in the following commands:
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,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,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,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, 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
Issue the following command to set the file permissions of the user-defined extension to group read and to be executable:
chmod a+rx {output_dir}/SwitchNode.lil