C ユーザー定義拡張機能のコンパイル

始める前に

ユーザー定義拡張機能は C で作成しなければなりません。 この拡張機能は、サンプル・ノード・ファイルで説明されている提供されているサンプル・ノード、 サンプル・パーサー・ファイルで説明されているサンプル・パーサー、 またはC でのメッセージ処理ノードまたは出力ノードの作成C での入力ノードの作成C でのパーサーの作成の指示を利用して独自に作成したノードかパーサーのいずれかにすることができます。ユーザー定義ノードの名前は、<nodename>.lil の形式で指定する必要があります。

このセクションでは、 サポートされているすべてのプラットフォームでのユーザー定義拡張機能のコンパイル方法について説明します。

この説明の中で使用されているファイル名は、提供されているサンプルの名前です。 独自のユーザー定義拡張機能をコンパイルする場合は、これらのファイル名を自分のファイル名に置き換える必要があります。

前提条件

ユーザー定義拡張機能をコンパイルする前に、 ご使用のオペレーティング・システムでサポートされている適切なコンパイラーがあることを確認してください。 適切なコンパイラーの例について、以下に示します。

Windows の場合、Microsoft Visual C++ .NET 2003

AIX の場合、 VisualAge® C++ for AIX Version 6.0

HP-UX の場合、HP ANSI C 03.52

Linux (x86 プラットフォーム) および Linux (zSeries プラットフォーム) 2.4 Kernel および 2.6 Kernel の場合、Gnu g++ (最低バージョン 3.2)

Linux (POWER プラットフォーム) の場合、Gnu g++, minimum version 3.3

Solaris SPARC の場合:
  • Sun ONE Studio 7, Enterprise Edition for Solaris
  • Sun ONE Studio 8, Compiler Collection

Solaris x86-64 の場合、 Sun Studio 10

z/OS Language Environment (LE) z/OS 1.5、z/OS 1.6 の場合、z/OS C/C++ 1.5 以降

ヘッダー・ファイル

C インターフェースは、以下のヘッダー・ファイルで定義されます。
BipCni.h
メッセージ処理ノード
BipCpi.h
メッセージ・パーサー
BipCci.h
ノードのパーサーの両方に共通のインターフェース
BipCos.h
プラットフォーム固有の定義

既存のカスタマーまたはサード・パーティー提供のユーザー定義拡張機能ライブラリーは、 変更または再コンパイルせずに、WebSphere Message Broker ブローカーで実行されます。 ただし、これらはワークベンチで手動で作成する必要があります。

コンパイル

サポートされている各プラットフォーム上でユーザー定義拡張機能のソースをコンパイルすると、 ロード可能インプリメンテーション・ライブラリー (LIL) ファイルが作成されます。 このファイルは、ブローカーがユーザー定義拡張機能をインプリメントするために必要なファイルです。

ユーザー定義拡張機能コードが置かれているディレクトリーに移動します。 以下に例を示します。
  cd install_dir¥sample¥extensions¥nodes¥  (Windows)
 
  cd install_dir/sample/extensions/nodes  (Linux および UNIX プラットフォーム)

Windows でのコンパイル

Windows (Microsoft Visual Studio C++ Version 7.1 で使用可能な、Microsoft 32-bit C/C++ Compiler を想定しています) 上で、以下のコマンドを使用して、ユーザー定義ノードをコンパイルします。
  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
注: このコマンドは長いため、数行に分けて掲載しなければなりませんでした。 コマンドを入力する際には、SwitchNode.cBipSampPluginUtil.c の間、さらに -link/DLL の間に必ずスペースを含めてください。

AIX でのコンパイル

以下のように AIX 上でサポートされる C コンパイラーを使用し、 ユーザー定義ノードをコンパイルしてリンクします。
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

HP-UX でのコンパイル

以下のように HP-UX 上でサポートされる C コンパイラーを使用し、 ユーザー定義ノードをコンパイルしてリンクします。
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

Linux でのコンパイル

以下のように Linux 上でサポートされる C コンパイラーを使用し、 ユーザー定義ノードをコンパイルしてリンクします。 なお、注意していただきたい点として、このページのコマンドは読みやすくするために行が分割されていますが、 実際に入力する際は、各コマンドを 1 行に入力してください。

/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
これらのコマンドでは、TransformNode オブジェクトと SwitchNode オブジェクトを含む、ファイル samples.lil が作成されます。
変更の始まりg++ を使用して C プラグインをビルドするには、いくつかの変更が必要です。 インターフェース関数は、C++ コンパイラーに対応した C スタイル関数として、次のように定義しなければなりません。
 #ifdef __cplusplus
   extern "C"{
   #endif
   void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
   {                                                                   
   ...                                                                 
   ...                                                                 
   }                                                                   
   #ifdef __cplusplus
   }                                                                   
   #endif
注: ifdefs は、コードを移植可能にしておき extern "C" ディレクティブを C コンパイラーから隠蔽するために必要です。
変更の終わり

Solaris でのコンパイル

以下のように Solaris 上でサポートされる C コンパイラーを使用し、 ユーザー定義ノードをコンパイルしてリンクします。
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

z/OS でのコンパイル

次のように、_CC_STEPS 変数を -1 に設定して、 プリリンカーまたはリンカーを使用することをリンクに強制します。
export _CC_STEPS=-1
別の方法として、 次のように、以下の 2 行を MAKE ファイルに追加してエクスポートすることができます。
_CC_STEPS=-1
.EXPORT : _CC_STEPS

以下のように z/OS 上でサポートされる 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 ./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

以下のコマンドを発行することにより、ユーザー定義拡張機能のファイル許可を、グループ読み取りおよび実行に設定します。

chmod a+rx {output_dir}/SwitchNode.lil
注: 最適化された作成の場合、-g-2 になります。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
as10000_