例題アプリケーションのビルド

次の場所に、機能の仕組みをわかりやすく示す例題アプリケーションが用意されています。 C:\Program Files\Micro Focus\Studio Enterprise Edition 6.0\Examples\OPEN-PLI\Dynamic Subroutines.

メインのプログラムは A で、B というサブルーチンを呼び出し、さらに B はサブルーチン C を呼び出します。

このアプリケーションをビルドするには、各ルーチンにある CALL 文を理解し、それらを最下位の呼び出しレベルから最上位のレベルにビルドする必要があります。アプリケーションのビルドを終えたら、すべての共有オブジェクトを再リンクする必要なしに、個別の共有オブジェクトを再ビルドできます。

注:UNIX / Linux では、共有オブジェクトをコンパイルするとき -pic コンパイラ・オプションを使用します。

例題アプリケーションでは A が B を呼び出し、B が C を呼び出しますが、このアプリケーションをビルドするには次のコマンドを表示されている順番に実行する必要があります。

mfpli -o C.o C.PLI
ld -shared  --warn-unresolved-symbols -o C.so C.o  -melf_i386 -rpath .$MFPLI_PRODUCT_DIR/lib/libmf.so
mfpli -o B.o B.PLI
ld -shared  --warn-unresolved-symbols -o B.so B.o C.so  -melf_i386  -rpath .$MFPLI_PRODUCT_DIR/lib/libmf.so
mfpli -o A.o A.PLI
ld -shared  --warn-unresolved-symbols -o A.so A.o B.so  -melf_i386  -rpath .B.so $MFPLI_PRODUCT_DIR/lib/dllmain.o $MFPLI_PRODUCT_DIR/lib/nojw.o $MFPLI_PRODUCT_DIR/lib/noofm.o $MFPLI_PRODUCT_DIR/lib/libmf.so *.so $HOME/staff/opli/DMFTEST/debug/
注:使用されている例には、Red Hat の構文が表示されています。他のオペレーティング・システムでは、ld コマンドに多少の編集が必要です。詳細については、『Creating a Sharable Library』を参照してください。

上記では、メインのプログラム A のみが dllmain.o にリンクされます。

すべてのサブルーチンは PLI RTS (libmf.so) にリンクされ、さらにサブルーチンが呼び出すルーチンの共有オブジェクトにリンクされます。

3 つの ld コマンドには --warn-unresolved-symbols があり、これにより予期せぬ欠落ビットをキャッチできます。これはオプションですが使用すると便利です。

64-ビット Red Hat または SUSE Linux でビルドする場合に限り -melf_i386 オプションが必要になります。