Benutzerdefinierte C-Erweiterung kompilieren

Sie können für alle unterstützten Betriebssysteme benutzerdefinierte Erweiterungen in C kompilieren.

Vorbereitungen

Beginn der ÄnderungWenn 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:Ende der Änderung

Beginn der ÄnderungEnde der Änderung

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.

Headerdateien

Die folgenden Headerdateien definieren die C-Schnittstellen:
BipCni.h
Nachrichtenverarbeitungsknoten
BipCpi.h
Nachrichtenparser
BipCci.h
Schnittstellen, die von Knoten und Parsern verwendet werden
BipCos.h
Plattformspezifische Definitionen

Kompilieren

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).

Beginn der ÄnderungDie 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.Ende der Änderung

Beginn der ÄnderungWeitere 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.Ende der Änderung

Navigieren Sie zu dem Verzeichnis, in dem sich Ihr benutzerdefinierter Erweiterungsquellcode befindet, und befolgen Sie die Anweisungen für Ihr Betriebssystem:

Kompilierung unter AIX

Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.

Beginn der Änderung
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
Ende der Änderung

Kompilierung unter HP-UX on PA-RISC

Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.

Beginn der Änderung
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
Ende der Änderung

Kompilierung unter HP-UX on Itanium

Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.

Beginn der Änderung
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
Ende der Änderung

Kompilierung unter Linux

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                                                        

Kompilierung unter Solaris

Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.

Beginn der Änderung
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
Ende der Änderung

Kompilierung unter Windows

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.

Beginn der Änderung
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
Ende der Änderung

Wenn Sie die Umgebungsvariable LIB richtig festgelegt haben, müssen Sie nicht die vollständigen Pfade der LIB-Dateien angeben.

Kompilierung unter z/OS

Wenn Sie eine in der Programmiersprache C geschriebene benutzerdefinierte Erweiterung kompilieren, müssen Sie einen unterstützten Compiler verwenden.

Setzen Sie die Variable _CC_STEPS auf -1, damit die von Ihnen verwendete Verknüpfung Prelinker oder Linker verwendet:
export _CC_STEPS=-1
Alternativ 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
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:30:01

as10000_