Benutzerdefinierte C-Erweiterung kompilieren

Vorbereitungen

Sie müssen über eine benutzerdefinierte Erweiterung verfügen, die in C geschrieben ist. Dies kann einer der unter Beispielknotendateien beschriebenen bereitgestellten Beispielknoten, der unter Beispielparserdateien beschriebene Beispiel-Parser oder ein Knoten oder Parser sein, den Sie selbst mit Hilfe der Anweisungen unter Nachrichtenverarbeitungs- oder Sendeknoten in C erstellen, Empfangsknoten in C erstellen oder Parser in C erstellen erstellt haben. Der Name des benutzerdefinierten Knotens muss das Format <Knotenname>.lil haben.

In diesem Abschnitt finden Sie alle Informationen zur Kompilierung von benutzerdefinierten Erweiterungen auf allen unterstützten Plattformen.

Die in diesen Anweisungen verwendeten Dateinamen beziehen sich auf die angegebenen Beispiele. Wenn Sie Ihre eigenen benutzerdefinierten Erweiterungen kompilieren, müssen Sie diese Dateinamen durch Ihre eigenen Dateinamen ersetzen.

Voraussetzungen

Stellen Sie vor dem Kompilieren von benutzerdefinierten Erweiterungen sicher, dass Sie über einen Compiler verfügen, der von Ihrem Betriebssystem unterstützt wird. Hier finden Sie einige Beispiele geeigneter Compiler:

Für Windows, Microsoft Visual C++ .NET 2003

Für AIX, VisualAge C++ for AIX Version 6.0

Für HP-UX, HP ANSI C 03.52

Für Linux (x86-Plattform) und Linux (zSeries-Plattform) 2.4 Kernel und 2.6 Kernel, Gnu g++, minimale Versionsnummer 3.2

Für Linux (POWER-Plattform), Gnu g++, minimale Versionsnummer 3.3

Für Solaris SPARC:
  • Sun ONE Studio 7, Enterprise Edition for Solaris
  • Sun ONE Studio 8, Compiler Collection

Für Solaris x86-64, Sun Studio 10

Für z/OS Language Environment (LE) z/OS 1.5, z/OS 1.6, z/OS C/C++ 1.5 oder höher

Headerdateien

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

Vorhandene Kunden oder benutzerdefinierte Erweiterungsbibliotheken von anderen Anbietern können auf einem WebSphere Message Broker-Broker ohne Änderungen oder erneute Kompilierungen ausgeführt werden. Sie müssen jedoch manuell in der Workbench erstellt werden.

Kompilierung

Durch das Kompilieren der Quelle für Ihre benutzerdefinieren Erweiterungen auf jeder der unterstützten Plattformen wird die LIL-Datei (Loadable Implementation Library) erstellt, die für den Broker zur Implementierung der benutzerdefinierten Erweiterung erforderlich ist.

Wechseln Sie in das Verzeichnis, in dem sich der Code der benutzerdefinierten Erweiterung befindet. Beispiel:
  cd Installationsverzeichnis\sample\extensions\nodes\  (Windows)
 
  cd Installationsverzeichnis/sample/extensions/nodes (Linux- und UNIX-Plattformen)

Kompilierung unter Windows

Kompilieren Sie den benutzerdefinierten Knoten unter Windows (Voraussetzung: Microsoft 32-Bit-C/C++-Compiler, in Microsoft Visual Studio C++ Version 7.1 verfügbar) mit folgendem Befehl:
  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
Anmerkung: Auf Grund der Länge des Befehls konnte er nur über mehrere Zeilen angegeben werden. Achten Sie beim Eingeben des Befehls darauf, dass Sie einen Leerschritt zwischen SwitchNode.c und BipSampPluginUtil.c sowie zwischen -link und /DLL setzen.

Kompilierung unter AIX

Kompilieren und verknüpfen Sie benutzerdefinierte Knoten unter AIX mit Hilfe eines unterstützten C-Compilers folgendermaßen:
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

Kompilierung unter HP-UX

Kompilieren und verknüpfen Sie benutzerdefinierte Knoten unter HP-UX mit Hilfe eines unterstützten C-Compilers folgendermaßen:
cc +z \
-I. \
   -I<Installationsverzeichnis>/include \
   -I<Installationsverzeichnis>/include/plugin \
   -c BipSampPluginUtil.c \
   -o <Ausgabeverzeichnis>/BipSampPluginUtil.o

cc +z \
-I. \
   -I<Installationsverzeichnis>/include \
   -I<Installationsverzeichnis>/include/plugin \
   -c Common.c \
   -o <Ausgabeverzeichnis>/Common.o

cc +z \
-I. \
   -I<Installationsverzeichnis>/include \
   -I<Installationsverzeichnis>/include/plugin \
   -c NodeFactory.c \
   -o <Ausgabeverzeichnis>/NodeFactory.o

cc +z \
-I. \
   -I<Installationsverzeichnis>/include \
   -I<Installationsverzeichnis>/include/plugin \
   -c SwitchNode.c \
   -o <Ausgabeverzeichnis>/SwitchNode.o

cc +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/PA_RISC2.0 \
   -L <Installationsverzeichnis>/jre/lib/PA_RISC2.0/server \
   -l imbdfplg

chmod a+r <Ausgabeverzeichnis>/SwitchNode.lil

Kompilierung unter Linux

Kompilieren und verknüpfen Sie benutzerdefinierte Knoten unter Linux mit Hilfe eines unterstützten C-Compilers wie im folgenden Beispiel beschrieben. Beachten Sie, dass die Zeilen aus Gründen der Lesbarkeit getrennt wurden. Geben Sie jeden Befehl in einer einzigen Zeile ein.

/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 -limbdfplg 
Durch diese Befehle wird die Datei 'samples.lil' erstellt, die 'TransformNode'- und 'SwitchNode'-Objekte bereitstellt.
Beginn der ÄnderungDas Erstellen des C-Plug-ins mit g++ erfordert einige Änderungen. Die Schnittstellenfunktion muss als eine Funktion im C-Stil für den C++ Compiler wie folgt definiert werden:
 #ifdef __cplusplus
   extern "C"{
   #endif
   void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
   {                                                                   
   ...                                                                 
   ...                                                                 
   }                                                                   
   #ifdef __cplusplus
   }                                                                   
   #endif
Anmerkung: Die 'ifdefs' sind erforderlich, damit der Code portierbar bleibt und um die externen "C"-Anweisungen vor einem C-Compiler zu verbergen.
Ende der Änderung

Kompilierung unter Solaris

Kompilieren und verknüpfen Sie benutzerdefinierte Knoten unter Solaris mit Hilfe eines unterstützten C-Compilers folgendermaßen:
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

Kompilierung unter z/OS

Setzen Sie die Variable _CC_STEPS auf -1, damit die von Ihnen verwendete Verknüpfung Prelinker oder Linker verwendet. Gehen Sie dazu folgendermaßen vor:
export _CC_STEPS=-1
Alternativ dazu können Sie diese zwei Zeilen für den Export zur Makefile hinzufügen. Gehen Sie dazu folgendermaßen vor:
_CC_STEPS=-1
.EXPORT : _CC_STEPS

Kompilieren und verknüpfen Sie benutzerdefinierte Knoten unter z/OS mit Hilfe eines unterstützten C-Compilers folgendermaßen:

cc -c \
 -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \
 -Wc,xplink \
 -W0,LIST\(./SwitchNode.lst\) \
 -I. -I${Installationsverzeichnis}/include \
 -I${Installationsverzeichnis}/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${Installationsverzeichnis}/include \
 -I${Installationsverzeichnis}/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${Installationsverzeichnis}/include \
 -I${Installationsverzeichnis}/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${Installationsverzeichnis}/include \
 -I${Installationsverzeichnis}/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

Erteilen Sie der Gruppe die Dateiberechtigungen der benutzerdefinierten Erweiterung zum Lesen und Ausführen, indem Sie folgenden Befehl aufrufen:

chmod a+rx {Ausgabeverzeichnis}/SwitchNode.lil
Anmerkung: -g wird bei optimierten Builds zu -2.
Zugehörige Konzepte
Benutzerdefinierte Erweiterungen
Zugehörige Verweise
Benutzerdefinierte Erweiterungen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as10000_