Sie können für alle unterstützten Betriebssysteme benutzerdefinierte Erweiterungen in C kompilieren.
Wenn Sie Ihre eigenen benutzerdefinierten Knoten, Parser und Benutzerexits in der Programmiersprache C erstellen, kompilieren Sie diese auf dem Betriebssystem, auf dem der Zielbroker ausgeführt wird. Beispiele für Knoten und Parser finden Sie unter Beispielknotendateien und Beispielparserdateien. Kompilieren Sie die Beispiele mit den hier gezeigten Anweisungen. Wenn Sie Ihre eigenen Erweiterungen erstellen möchten, lesen Sie die folgenden Abschnitte:
In diesen Anweisungen werden die Dateinamen der bereitgestellten Beispiele verwendet. Wenn Sie Ihre eigenen benutzerdefinierten Erweiterungen kompilieren, müssen Sie diese Dateinamen durch Ihre eigenen Dateinamen ersetzen.
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, benötigen Sie einen kompatiblen Compiler. Ausführliche Informationen zu unterstützten Compilern finden Sie unter Unterstützung von Zusatzsoftware.
Kompilieren Sie die Quelle für Ihre benutzerdefinieren Erweiterungen auf jedem der unterstützten Betriebssysteme, um die ausführbare Datei zu erstellen, die vom Broker zur Implementierung der benutzerdefinierten Erweiterung aufgerufen wird. Auf Linux-, UNIX- und z/OS-Systemen handelt es sich bei dieser Datei um eine ladbare Implementierungsbibliothek (LIL); auf Windows-Systemen handelt es sich um eine dynamische Ladebibliothek (DLL).
Die Bibliotheken, die Sie für benutzerdefinierte Knoten oder Parser erstellen, müssen auf allen Betriebssystemen die Erweiterung .lil haben, sodass der Broker sie laden kann. Bibliotheken, die Benutzerexits enthalten, müssen auf allen Betriebssystemen über die Erweiterung .lel verfügen. Die Beispiele in diesem Abschnitt zeigen Bibliotheken mit der Erweiterung .lil.
Weitere Informationen finden Sie in der Dokumentation zu dem von Ihnen verwendeten Compiler; dort finden Sie die vollständigen Einzelheiten der verfügbaren Kompilier- und Linkoptionen, die möglicherweise für Ihre Programme erforderlich sind.
Navigieren Sie zu dem Verzeichnis, in dem sich Ihr benutzerdefinierter Erweiterungsquellcode befindet, und befolgen Sie die Anweisungen für Ihr Betriebssystem:
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.
xlc_r -q32 \ -I. \ -I/Installationsverzeichnis/include/plugin \ -c SwitchNode.c \ -o SwitchNode.o xlc_r -q32 \ -I. \ -I/Installationsverzeichnis/include/plugin \ -c BipSampPluginUtil.c \ -o BipSampPluginUtil.o xlc_r -q32 \ -I. \ -I/Installationsverzeichnis/include/plugin \ -c Common.c \ -o Common.o xlc_r -q32 \ -I. \ -I/Installationsverzeichnis/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 /Installationsverzeichnis/lib \ -l imbdfplg chmod a+r SwitchNode.lil
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.
cc +z -DD32 \ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c BipSampPluginUtil.c \ -o Ausgabeverzeichnis/BipSampPluginUtil.o \ -Ae cc +z -DD32 \ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c Common.c \ -o Ausgabeverzeichnis/Common.o \ -Ae cc +z -DD32 \ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c NodeFactory.c \ -o Ausgabeverzeichnis/NodeFactory.o \ -Ae cc +z -DD32 \ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c SwitchNode.c \ -o Ausgabeverzeichnis/SwitchNode.o \ -Ae cc +z -DD32 \ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c TransformNode.c \ -o Ausgabeverzeichnis/TransformNode.o \ -Ae ld -b \ -o Ausgabeverzeichnis/SwitchNode.lil \ Ausgabeverzeichnis/BipSampPluginUtil.o \ Ausgabeverzeichnis/Common.o \ Ausgabeverzeichnis/NodeFactory.o \ Ausgabeverzeichnis/SwitchNode.o \ Ausgabeverzeichnis/TransformNode.o \ -L Installationsverzeichnis/lib \ -L Installationsverzeichnis/xml4c/lib \ -L Installationsverzeichnis/merant/lib \ -L Installationsverzeichnis/jre/lib/PA_RISC2.0 \ -L Installationsverzeichnis/jre/lib/PA_RISC2.0/server \ -l imbdfplg chmod a+r Ausgabeverzeichnis/SwitchNode.lil
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.
aCC -O +DD64 -AA -mt +z\ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c BipSampPluginUtil.c \ -o Ausgabeverzeichnis/BipSampPluginUtil.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c Common.c \ -o Ausgabeverzeichnis/Common.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c NodeFactory.c \ -o Ausgabeverzeichnis/NodeFactory.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c SwitchNode.c \ -o Ausgabeverzeichnis/SwitchNode.o aCC -O +DD64 -AA -mt +z\ -I. \ -I/Installationsverzeichnis/include \ -I/Installationsverzeichnis/include/plugin \ -c TransformNode.c \ -o Ausgabeverzeichnis/TransformNode.o ld -b \ -o Ausgabeverzeichnis/SwitchNode.lil \ Ausgabeverzeichnis/BipSampPluginUtil.o \ Ausgabeverzeichnis/Common.o \ Ausgabeverzeichnis/NodeFactory.o \ Ausgabeverzeichnis/SwitchNode.o \ Ausgabeverzeichnis/TransformNode.o \ -L Installationsverzeichnis/lib \ -L Installationsverzeichnis/xml4c/lib \ -L Installationsverzeichnis/merant/lib \ -L Installationsverzeichnis/jre/lib/IA64N\ -L Installationsverzeichnis/jre/lib/IA64N/server \ -l imbdfplg chmod a+r Ausgabeverzeichnis/SwitchNode.lil
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.
/usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/Installationsverzeichnis/include -I/Installationsverzeichnis/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE TransformNode.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/Installationsverzeichnis/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE SwitchNode.c /usr/bin/gcc -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/Installationsverzeichnis/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE BipSampPluginUtil.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/Installationsverzeichnis/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE Common.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/Installationsverzeichnis/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/Installationsverzeichnis/lib -limbdfplg
Mit diesen Befehlen wird die Datei samples.lil erstellt, die die Objekte 'Umsetzungsknoten' und 'Umschaltungsknoten' bereitstellt.
Beim Erstellen der benutzerdefinierten C-Erweiterung mit g++ sind einige Änderungen erforderlich; Sie müssen die Schnittstellenfunktion als Funktion im C-Stil für den C++ Compiler definieren. Im folgenden Beispiel sind ifdefs erforderlich, damit der Code portierbar bleibt und um die externen "C"-Anweisungen vor einem C-Compiler zu verbergen.
#ifdef __cplusplus extern "C"{ #endif void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { ... ... } #ifdef __cplusplus } #endif
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.
cc -mt \
-I. \
-I/Installationsverzeichnis/include \
-I/Installationsverzeichnis/include/plugin \
-c SwitchNode.c \
-o Ausgabeverzeichnis/SwitchNode.o
cc -mt \
-I. \
-I/Installationsverzeichnis/include \
-I/Installationsverzeichnis/include/plugin \
-c BipSampPluginUtil.c \
-o Ausgabeverzeichnis/BipSampPluginUtil.o
cc -mt \
-I. \
-I/Installationsverzeichnis/include \
-I/Installationsverzeichnis/include/plugin \
-c NodeFactory.c \
-o Ausgabeverzeichnis/NodeFactory.o
cc -mt \
-I. \
-I/Installationsverzeichnis/include \
-I/Installationsverzeichnis/include/plugin \
-c Common.c \
-o Ausgabeverzeichnis/Common.o
cc -G \
-o Ausgabeverzeichnis/SwitchNode.lil \
Ausgabeverzeichnis/SwitchNode.o \
Ausgabeverzeichnis/BipSampPluginUtil.o \
Ausgabeverzeichnis/NodeFactory.o \
Ausgabeverzeichnis/Common.o \
-L /Installationsverzeichnis/lib \
-l imbdfplg
chmod a+r Ausgabeverzeichnis/SwitchNode.lil
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.
Achten Sie darauf, dass Sie einen Leerschritt zwischen SwitchNode.c und BipSampPluginUtil.c sowie zwischen -link und /DLL setzen.
Geben Sie den Befehl in einer einzigen Zeile ein; im folgenden Beispiel wurden die Zeilen zur besseren Lesbarkeit umgebrochen.
cl /VERBOSE /LD /MD /Zi /GX /I. /IInstallationsverzeichnis\include\plugin SwitchNode.c BipSampPluginUtil.c Common.c NodeFactory.c TransformNode.c -link /DLL Installationsverzeichnis\lib\imbdfplg.lib /OUT:SwitchNode.lil
Wenn Sie die Umgebungsvariable LIB richtig festgelegt haben, müssen Sie nicht die vollständigen Pfade der LIB-Dateien angeben.
Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.
export _CC_STEPS=-1Alternativ dazu können Sie diese zwei Zeilen für den Export zur Makefile hinzufügen:
_CC_STEPS=-1 .EXPORT : _CC_STEPS
Wenn Sie optimierte Builds erstellen möchten, verwenden Sie in den folgenden Befehlen -2 anstelle von -g:
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${Installationsverzeichnis}/include \ -I${Installationsverzeichnis}/include/plugin \ -I${Installationsverzeichnis}/sample/include \ -I${Installationsverzeichnis}/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${Installationsverzeichnis}/include \ -I${Installationsverzeichnis}/include/plugin \ -I${Installationsverzeichnis}/sample/include \ -I${Installationsverzeichnis}/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${Installationsverzeichnis}/include \ -I${Installationsverzeichnis}/include/plugin \ -I${Installationsverzeichnis}/sample/include \ -I${Installationsverzeichnis}/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${Installationsverzeichnis}/include \ -I${Installationsverzeichnis}/include/plugin \ -I${Installationsverzeichnis}/sample/include \ -I${Installationsverzeichnis}/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 \ ${Installationsverzeichnis}/lib/libimbdfplg.x
Setzen Sie die Dateiberechtigungen der benutzerdefinierten Erweiterung auf group read (Leseberechtigung für Gruppe), und führen Sie das Programm aus, indem Sie den folgenden Befehl ausgeben:
chmod a+rx {Ausgabeverzeichnis}/SwitchNode.lil