2013-10-08 2 views
1

나는 파이썬 응용 프로그램에 c 라이브러리를 통합하려고합니다. 그리고 Python 크기의 변수리스트를 C lib의 래퍼 (나는 단지 호출 중임)에 전달하기 만하면된다. 나는 작은 프로그램을 작성했다 :
파이썬 응용 프로그램에서 공유 라이브러리를로드 한 후. 파이썬 측면에서 :파이 응용 프로그램에 파이썬 응용 프로그램을 포함

c_args = [5,6] 
PyPrintVal(c_args) 

C 측에서는 :

PyPrintVal(PyObject *c_args) 
{ 
     int i=0; 
     int j=0; 
     printf("In eINoiseRemoval\n"); 
     if (!PyArg_ParseTuple(c_args, "ii", &i,&j)) 
     {  fprintf(stderr, "error in parsing\n"); 
       return -1; 
     } 
     printf(i1=%d j=%d\n, i,j) 
} 

는 전 세그먼트 오류는 무엇입니까? 남은 것이 있습니까?
나는 찾고 있습니다 http://docs.python.org/2/extending/extending.html#a-simple-example

답변을 얻지 못했습니다. 감사

+0

'PyPrintVal (* c_args)'를 호출하십시오. – falsetru

+0

뜻 : 파이썬 측에서'PyPrintVal (* c_args)'를 호출하십시오. – falsetru

+0

오른쪽 ctypes. from ctypes import *; 핸들 = CDLL ("example.so"); PyPrintVal = handle.PyPrintVal; PyPrintVal.argtypes = [py_object] – Javed

답변

1

이 세그먼트 폴트가 정확히 찾아 gdb를 사용할 수 있습니다

$ gdb python 
...... 
> set args my_python_script.py 
> run 
....... 
Segmentation Fault 
> where 

이 당신에게 스택 추적을주고는 segfault의 정확한 위치를 가리 킵니다.

+0

감사합니다.이 PyList_GetItem (,) 호출도 작동합니다! – Javed

+0

그리고 지금은 다음과 같습니다. i = PyInt_AsLong (PyList_GetItem (c_Arg, 0)); i = PyInt_AsLong (PyList_GetItem (c_Arg, 0)); printf (i = % dj = % d \ n, i, j); 출력 i = 5j = 6 – Javed

관련 문제