2012-08-24 3 views
0

파이썬 내부에서 제 3 자 c 함수를 호출해야한다는 요구 사항이 있습니다. 이렇게하려면 모든 파이썬 특정 C 코드 (METH_VARARGS 사용)를 사용하여 타사 함수를 호출하는 C API를 만들었습니다.파이썬에서 제 3 자 c 함수 호출하기

import liba * 

파이썬은 지금 libb.so 찾을 수없는 불평 : 나는, 내가 뭘 내 파이썬 파일에서 libb.so 3 자 라이브러리 liba.so이 코드를 연결. 내가 뭘 잘못하고 있니?

답변

1

PATH에 liba.so을 포함해야합니다. 그렇지 않으면 파이썬은 어디에서 찾을 지 알 수 없습니다.

그렇지 않으면 부하 스크립트

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

의 디렉토리에서로드하려고합니다, 그것은 PATH에서 찾을 수있는 경우가 라이브러리를로드 할 수 있습니다, 다음 코드를 사용해보십시오 업데이트 : 네이티브 타사 라이브러리 (libb)에 액세스하기 위해 네이티브 라이브러리 (liba)를 만든 이유가 궁금합니다. 제삼자 C 라이브러리를 ctypes을 사용하여 파이썬으로 직접 가져 와서 libb에 파이썬 (기본이 아닌) 래퍼를 만들 수 있습니다. 예를 당신이

>>> 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) 
+0

확실 liba.so을 만들어 libb.so을 위해 할 것 time 표준 C lib 디렉토리와 통화 할 수 내 경로에 모두 있습니다. 여전히 같은 문제가 있습니다. libb.so (타사 라이브러리)를 찾을 수 없음 – marvel

+0

liba.so를 찾을 수는 있지만 liba.so와 연결된 libb.so에 대해 불평합니다. libb.so도 경로에 있음을 확인했습니다. – marvel

+0

그래서'CDLL (find_library ('b'))'하면 어떻게됩니까? 또한'liba'를 약간 이상하게 임포트하고 있음을 알았습니다.'import liba' 또는'lib import'를하지 말아야합니다.'import liba *'가 아닙니다. 후자가 유효하지 않습니다. ' –