# 6 `dl` -- 共有オブジェクトのC関数の呼び出し

Unixプラットフォームで利用できます。

`dl`モジュールは`dlopen()`関数へのインターフェースを 定義します。 これはダイナミックライブラリにハンドルするための Unixプラットフォーム上の最も一般的なインターフェースです。 そのライブラリの任意の関数を呼ぶプログラムを与えます。

警告: `dl`モジュールはPythonの型システムとエラー処理をバイパス しています。もし間違って使用すれば、セグメンテーションフォルト、 クラッシュ、その他の不正な動作を起こします。

注意: このモジュールは`sizeof(int) == sizeof(long) == sizeof(char *)` でなければ働きません。 そうでなければimportするときに`SystemError`が送出されるでしょう。

`dl`モジュールは次の関数を定義します:

`open`( | name[, mode`= RTLD_LAZY`])

  共有オブジェクトファイルを開いて、ハンドルを返します。 モードは遅延結合(`RTLD_LAZY`)または即時結合(`RTLD_NOW`) を表します。 デフォルトは`RTLD_LAZY`です。 いくつかのシステムは`RTLD_NOW`をサポートしていないことに 注意してください。

  返り値は`dlobject`です。

`dl`モジュールは次の定数を定義します:

`RTLD_LAZY`
  `open()`の引数として使います。

`RTLD_NOW`
  `open()`の引数として使います。 即時結合をサポートしないシステムでは、 この定数がモジュールに現われないことに注意してください。 最大のポータビリティを求めるならば、システムが即時結合をサポートする かどうかを決定するために`hasattr()`を使用してください。

`dl`モジュールは次の例外を定義します:

exception `error`
  動的なロードやリンクルーチンの内部でエラーが生じたときに送出される例外です。

例:

    >>> import dl, time
    >>> a=dl.open('/lib/libc.so.6')
    >>> a.call('time'), time.time()
    (929723914, 929723914.498)

この例はDebian GNU/Linuxシステム上で行なったもので、 このモジュールの使用はたいてい悪い選択肢であるという事実のよい例です。