オプションの相対順序を維持したまま、検索アルゴリズムを変更して、オプションをシステム リンカーに渡す (-L dir)

cob の -l フラグとともに指定したライブラリがシステム リンカーによって検索される順序を変更します。-L オプションは、cob のコマンド ラインで -l オプションの前に指定した場合にのみ有効です。

cob の -L フラグの効果は、システム リンカー ld の -L オプションと同じです (このリンカー オプションの詳細については、ご利用のオペレーティング システムのドキュメントを参照してください)。通常、ld では、あらかじめ定義されたデフォルト ディレクトリのセット (通常は /usr/lib および /lib ですが、システムによって異なります) でのみライブラリが検索されます。-L フラグを指定すると、システム リンカーは、指定されたディレクトリで最初にこれらのライブラリを検索します。-L オプションの指定順序は重要で、ディレクトリは指定された順番に検索されます。

環境変数 LD_LIBRARY_PATH または LIBPATH (AIX のみ) のパスは、-L、+L のディレクトリの後に、ただしデフォルトのパスよりも前に検索されます。

例:

次に、+L および -L フラグの使用例を示し、ライブラリが検索されるディレクトリの順序を説明します。

cob +L /usr/mylib +llib1 object.o -L /usr/grouplib -llib2 +llib3

オプションがシステム リンカーに渡される相対順序は次のようになります。

  1. 1. object.o
  2. -L/usr/grouplib
  3. -llib2
  4. -L/usr/mylib
  5. -llib1
  6. -llib3

「+」のオプションは ld に渡される際に「-」のオプションになり、リストの最後に移動されることに注意してください。

これは、ld がどのような順序でライブラリを検索するか、またどのディレクトリ内を検索するかに影響します。原則として、ld は次の順序でライブラリ (-lname で指定) を検索します。

  1. コマンド ラインで -l よりも前に指定された -L ディレクトリ (指定された順序で検索)
  2. LD_LIBRARY_PATH
  3. デフォルト ディレクトリ (通常は /usr/lib ですが、オペレーティング システムによって大きく異なります)

AIX では、LD_LIBRARY_PATH ではなく、LIBPATH が使用されます。

上記の例では、ld は、次の順序で (ディレクトリ、ライブラリ) の組み合わせを使用してライブラリを検索します。

  1. -L/usr/grouplib -llib2
  2. $LD_LIBRARY_PATH -llib2
  3. デフォルト ディレクトリ -llib2
  4. -L/usr/grouplib -llib1
  5. -L/usr/mylib -llib1
  6. $LD_LIBRARY_PATH -llib1
  7. デフォルト ディレクトリ -llib1
  8. -L/usr/grouplib -llib3
  9. -L/usr/mylib -llib3
  10. $LD_LIBRARY_PATH -llib3
  11. デフォルト ディレクトリ -llib3

すべての検索パスが検索されるのは、それ以前の検索パスすべてで、「ファイルが見つからない」という状態が返された場合のみです。