簡體   English   中英

從python調用第三方c函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM