ライブラリ ファイルを使用する実行可能ファイルの作成

コマンド ラインで cob -x に -l フラグを使用すると、共有ライブラリ ファイルにリンクしたシステムの実行可能アプリケーション ファイルを作成したり、アーカイブ ファイルを組み込んだシステムの実行可能アプリケーション ファイルを作成することができます。コマンド ラインは、次の形式で入力します。

cob -x filenames [-L dir] [-l name]

パラメーターは次のとおりです。

filenames
cob コマンドに入力するファイルを列挙します。
-L dir
cob の -l フラグとともに指定したライブラリが、システム リンカーに検索される順番を変更します。
-l name
参照を解決するために検索するファイル名を指定します。libname.so (または libname.a) が検索されます。

これにより、すべてのアプリケーション プログラム、およびサブプログラムは、デフォルトの COBOL ランタイム システムのライブラリ、およびオペレーティング システムのサポート ライブラリと同様に、指定されたライブラリにもリンクされます。このようにして作成されたシステムの実行可能ファイルでは、実行時に、実行が主要エントリ ポイントに渡る前に、指定された共有ライブラリがあらかじめロードされます。

システムの実行可能ファイルを作成する際に、共有ライブラリにある参照先モジュールのコードは、ユーザーのシステムの実行可能ファイルには組み込まれません。代わりに、このようなモジュールが実行時に参照されると、制御がそのモジュールに渡される前に、該当する共有ライブラリが、共有ライブラリ ファイルからメモリにロードされます。

cob コマンドでは、ベース名が同じである場合は、アーカイブ ライブラリより共有ライブラリが優先して使用されます。cob フラグでライブラリ名が指定されると、cob では、その名前が共有ライブラリ名と解釈されますが、指定された名前のライブラリが存在しない場合は、同じ名前のアーカイブ ライブラリが使用されます。

たとえば、cob のコマンド ラインで、abc と xyz という 2 つのライブラリを指定する場合は、次のように入力します。

cob -x prog.cbl -labc -lxyz

ライブラリ libxyz.solibxyz.a、および libabc.a が存在する場合に、参照解決のために検索されるのは、libxyz.so および libabc.a のみです。libxyz.a は検索されません。

共有ライブラリ ファイル内のサブプログラムが参照されている場合は、ライブラリ全体がリンクされます。これに対し、アーカイブ ライブラリ内のサブプログラムが参照されている場合は、参照されているサブプログラムのみがリンクされます。そのため、共有ライブラリ ファイルのサブプログラムは、参照されていないものでも動的ローダーで使用できますが、アーカイブ ライブラリのものは使用できません。