10.3 共有ライブラリの動的読み込み

動的読み込みをサポートするプラットフォームでは、標準のランタイムシステムの提供するものに加えて、追加の C プリミティブを提供する C の共有ライブラリ(DLL)を動的にリンクすることができます。 18.1.4 節「Dynamically linking C code with Caml code」 で述べるように、共有ライブラリの名前はリンク時に提供され実行可能バイトコードファイルに記録されます。 ocamlrun はバイトコードプログラムを実行する際にライブラリの位置を特定し、プリミティブへの参照を解決します。

ocamlrun コマンドは以下のディレクトリから上から順に共有ライブラリを探索します。

  1. ocamlrun のコマンドラインで -I オプションで指定したディレクトリ。
  2. 環境変数 CAML_LD_LIBRARY_PATH で指定されたディレクトリ。
  3. リンク時に ocamlc-dllpath オプションで指定されたディレクトリ(これらのディレクトリは実行可能バイトコードファイルに記録されます)。
  4. ld.conf ファイルに指定されたディレクトリ。 このファイルは Objective Caml の標準ライブラリディレクトリの中にあり、探索するディレクトリの(一行 1 ディレクトリの)一覧になっています。 ユーザーはよく使う共有ライブラリのディレクトリをこのファイルに追加することができます。 ただし、インストールの一貫性から、 ld.conf ファイルに設定を追加するよりも、システムの stublibs ディレクトリに直接共有ライブラリをインストールことを推奨します。
  5. システムの dynamic loader の探索するデフォルトのディレクトリ。 Unix では /lib/usr/lib に、 /etc/ld.so.conf と環境変数 LD_LIBRARY_PATH に指定されたディレクトリを加えたものになります。 Windows では、システムディレクトリに環境変数 PATH に指定されたディレクトリを加えたものになります。