Вызов сторонней функции c из python
У меня есть требование вызова сторонних функций изнутри Python. Для этого я создал ac api, в котором есть весь специфический для Python код c (использующий METH_VARARGS) для вызова сторонних функций. Я связал этот код liba.so с 3-сторонней библиотекой libb.so В моем файле python я делаю:
import liba *
Python теперь жалуется, что libb.so не найден. Что я делаю неправильно?
1 ответ
Вы должны включить 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
ОБНОВЛЕНИЕ: мне было интересно, почему вы создали нативную библиотеку (liba
) для доступа к собственной сторонней библиотеке (libb
). Вы можете импортировать стороннюю библиотеку c прямо в Python, используя ctypes
и создайте оболочку Python (не нативную) для libb
, Например, для вызова стандартного 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)