0
我有一個從python裏面調用第三方c函數的需求。 爲此,我創建了一個具有所有python特定c代碼(使用METH_VARARGS)來調用第三方函數的c api。我掛這個代碼liba.so與3方庫libb.so 在我的Python文件,我在做:從python調用第三方c函數
import liba *
的Python現在笙歌libb.so沒有找到。 我在做什麼錯?
我有一個從python裏面調用第三方c函數的需求。 爲此,我創建了一個具有所有python特定c代碼(使用METH_VARARGS)來調用第三方函數的c api。我掛這個代碼liba.so與3方庫libb.so 在我的Python文件,我在做:從python調用第三方c函數
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
)。您可以使用將第三方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)
我確信liba.so和libb.so都在我的道路。仍然有同樣的問題。沒有找到libb.so(第三方庫) – marvel
它能夠找到liba.so ..但抱怨與liba.so鏈接的libb.so.我確信libb.so也在路徑 – marvel
因此,如果你做'CDLL(find_library('b'))'它的工作原理?也注意到你在輸入'liba'時有點奇怪,你應該執行'import liba'或'from lib import *'不要'import liba *'後者是無效的語法 ' –