###
1 共有ライブラリを見つける

コンパイルされる言語でプログラミングしている場合、共有ライブラリはプログラムを コンパイル/リンクしているときと、そのプログラムが動作しているときにアクセスされます。

ctypesライブラリローダーはプログラムが動作しているときのように振る舞い、 ランタイムローダーを直接呼び出すのに対し、`find_library`関数の目的は コンパイラが行うのと似た方法でライブラリを探し出すことです (複数のバージョンの共有ライブラリがあるプラットホームでは、 一番最近に見つかったものがロードされます)。

`ctypes.util`モジュールはロードするライブラリを決めるのに 役立つ関数を提供します。

`find_library(name)`
  ライブラリを見つけてパス名を返そうと試みます。nameは libのような接頭辞、`.so`、`.dylib`のような接尾辞、 あるいは、バージョン番号が何も付いていないライブラリの名前です (これは posix リンカのオプション-l)に使われている形式です)。 もしライブラリが見つからなければ、`None`を返します。

厳密な機能はシステムに依存します。

Linuxでは、`find_library`はライブラリファイルを見つけるために 外部プログラム (/sbin/ldcon?g、gccおよびobjdump)を実行しようとします。 ライブラリファイルのファイル名を返します。いくつか例があります:

    >>> from ctypes.util import find_library
    >>> find_library("m")
    'libm.so.6'
    >>> find_library("c")
    'libc.so.6'
    >>> find_library("bz2")
    'libbz2.so.1.0'
    >>>

OS Xでは、`find_library`はライブラリの位置を探すために、 予め定義された複数の命名方法とパスを試し、成功すればフルパスを返します:

    >>> from ctypes.util import find_library
    >>> find_library("c")
    '/usr/lib/libc.dylib'
    >>> find_library("m")
    '/usr/lib/libm.dylib'
    >>> find_library("bz2")
    '/usr/lib/libbz2.dylib'
    >>> find_library("AGL")
    '/System/Library/Frameworks/AGL.framework/AGL'
    >>>

Windows では、`find_library`はシステムの探索パスに沿って探し、 フルパスを返します。しかし、予め定義された命名方法がないため、 `find_library("c")`のような呼び出しは失敗し、 `None`を返します。

もし`ctypes`を使って共有ライブラリをラップするなら、 実行時にライブラリを探すために`find_library`を使う代わりに、 開発時に共有ライブラリ名をを決めて、ラッパーモジュールに ハードコードした方が良いかもしれません。