0

Python内からサードパーティのc関数を呼び出す必要があります。これを行うために、サードパーティ関数を呼び出すためのすべての Python 固有の C コード (METH_VARARGS を使用) を持つ ac api を作成しました。このコード liba.so をサードパーティ ライブラリ libb.so にリンクしました。私の python ファイルでは、次のことを行っています。

import liba *

Python は libb.so が見つからないと文句を言うようになりました。私は何を間違っていますか?

4

1 に答える 1

2

PATHに含める必要がありliba.soます。そうしないと、Python はどこを探すべきかわかりません。

次のコードを試してください。PATH からライブラリが見つかった場合はライブラリをロードします。そうでない場合は、ロード スクリプトのディレクトリからロードを試みます。

from ctypes import *
from ctypes.util import find_library
import os


if find_library('a'):
    liba = CDLL(find_library('a'))
else:
    # library is not in your path, try loading it from the current directory
    print 'liba not found in system path, trying to load it from the current directory'
    print '%s/%s'%(os.path.dirname(__file__),'liba.so')
    liba = CDLL(os.path.join(os.path.dirname(__file__),'liba.so'))

http://docs.python.org/library/ctypes.html#finding-shared-libraries

更新:libaネイティブのサードパーティ ライブラリ ( ) にアクセスするためにネイティブ ライブラリ ( ) を作成した理由を知りたいと思っていましたlibb。を使用して、サードパーティの c ライブラリを直接 python にインポートしctypeslibb. たとえば、標準の c lib を呼び出すには、次のtimeようにします。

>>> from ctypes import *
>>> lib_c = CDLL("libc.so.6")
>>> print lib_c.time(None)
1150640792

そしてlibbの場合

>>> from ctypes import *
>>> lib_b = CDLL("libb")
>>> lib_b.hello_world(None)
于 2012-08-24T22:24:47.247 に答える