0

我需要从 python 内部调用第三方 c 函数。为此,我创建了 ac api,它具有所有 python 特定的 c 代码(使用 METH_VARARGS)来调用第三方函数。我将此代码 liba.so 与 3 方库 libb.so 链接在我的 python 文件中,我正在做:

import liba *

Python 现在抱怨 libb.so not found。我究竟做错了什么 ?

4

1 回答 1

2

你必须包含liba.so在你的 PATH 中,否则 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) 来访问本地 3rd 方库 ( libb)。您可以使用将第三方 c 库直接导入 pythonctypes并为libb. 例如调用标准的 c libtime你会做

>>> 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 回答