[英]calling third party c functions from python
我需要從python內部調用第三方c函數。 為此,我創建了ac api,其中包含所有python特定的c代碼(使用METH_VARARGS)來調用第三方函數。 我將此代碼liba.so與3方庫libb.so鏈接在我的python文件中,我正在做:
import liba *
Python現在抱怨libb.so沒找到。 我究竟做錯了什么 ?
你必須在你的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
)。 您可以使用ctypes
將第三方c庫直接導入python,並為libb
創建一個python(非本機)包裝器。 例如,要調用標准的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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.