Python에서 C 모듈을 통합하고자하므로 인터페이스가 Python.h
입니다. 모든 것은 오류와 경고없이 컴파일되므로 문제가 무엇인지 이해할 수 없습니다.Python/C API - 결과가 표시되지 않습니다.
C 측 :
#include <python3.5m/Python.h>
...
#define PyInt_AsLong(x) (PyLong_AsLong((x)))
typedef PyObject* Py;
static Py getSumma(Py self, Py args){
Py nums;
if (!PyArg_ParseTuple(args, "O", &nums)){
return NULL;
}
size_t numsAmount = PyList_Size(args);
int32_t summa = 0;
for (size_t i = 0; i < numsAmount; i++){
Py temp = PyList_GetItem(nums, i);
int32_t num = PyInt_AsLong(temp);
summa += num;
}
return Py_BuildValue("l", summa);
}
static PyMethodDef moduleMethods[] = {
{"getSumma", (PyCFunction)getSumma, METH_VARARGS, NULL},
{NULL, NULL, 0, NULL}
};
static PyModuleDef SummaLogic = {
PyModuleDef_HEAD_INIT,
"SummaLogic",
"",
-1,
moduleMethods
};
PyMODINIT_FUNC PyInit_SummaLogic(void){
return PyModule_Create(&SummaLogic);
}
setup.py :
from distutils.core import setup, Extension
SummaLogic = Extension("SummaLogic", sources=['SummaLogic.c'])
setup(ext_modules=[SummaLogic])
파이썬 측면 :
from SummaLogic import getSumma
if __name__ == "__main__":
a = [1, 2, 3]
b = getSumma(a)
print(b)
내가 터미널에서 시작할 때 잘 보이지만, - 아무 일도 발생하지 않습니다, 어떤 활동도하지 않고 매달려 있습니다. 나는 무엇을 놓칠 수 있습니까?
매우 감사드립니다! 당신은 저를 많은 시간을 절약했습니다.) – errfrom
@errfrom 환영합니다 :) gdb를 사용하여 디버깅하기 쉽도록 스크립트를 실행할 때 세그먼트 화 오류가 발생했습니다. – MSeifert