外部関数の動的リンク

動的リンクライブラリ(Unix系システムではxxx.soファイル,Windowsシステムではxxx.dllファイル)をロードするには以下のライブラリを使用する.

 structure DynamicLink
 : sig
     val dlclose : unit ptr  -> unit
     val dlopen : string  -> unit ptr
     val dlsym : unit ptr * string  -> unit ptr
   end

ここで,

  • dlopen(libName) はlibNameで与えられた文字列をファイルパスと見なし,動的リンクライブラリをオープンしそのポインタを返す.ライブラリのオープンに失敗した場合はその原因をSysErr例外で通知する.
  • dlsym(libPtr, funnName)は,libPtrが指す動的リンクライブラリの中のfunnNameを持つ関数ポインタを返す.関数ポインタの取り出しに失敗した場合はその原因をSysErr例外で通知する.
  • dlclose(libPtr) はlibPtrが指す動的リンクライブラリをクローズする.

名前の解決.

ライブラリ名の解決の方法およびライブラリのオープン処理の詳細は処理系依存である.Unix系の処理系の場合,'dlopen'および'dlsym'を用いライブラリファイルをアクセスする.通常のファイルパスの解決処理ではなく,環境変数LD_LIBRARY_PATHに束縛されたパスのリストを用いたファイルパスの解決を行う.

FFIライブラリ.

DynmicLinkはFFIライブラリの一つとして実装されている.FFIライブラリには,外部関数の使用に関する種々のユーテリティライブラリが提供されている.

Last modified:2007/03/25 11:30:37
Keyword(s):
References:[外部関数束縛]