ライブラリファイルを使用する実行形式の作成方法

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

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

パラメータの内容は次の通りです。

filenames

cob コマンドに入力するファイルを列挙します。

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

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

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

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

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

cob -x prog.cbl -labc -lxyz

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

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