からPython関数を呼び出すしようとするとSegfault、私はいくつかの点でC.だから、C
からPythonのコールバック関数を呼び出したい、関数はCに送信され、この
ようタプルにパックされましたPyObject *userData = Py_BuildValue("Oi",py_callback,some_number);
その地域のどこかに、Py_INCREF(py_callback)
もあります。プログラム内のいくつかの後の時点で
は、私が
PyObject *py_callback;
int some_number;
PyArg_ParseTuple((PyObject*)userData,"Oi",&py_callback,&some_number); // returns true
PyObject *py_result = PyObject_CallFunctionObjArgs(py_callback,
/* ... */
NULL);
と最後の呼び出しは、セグメンテーションフォールトをスローすることを、その関数を呼び出したいです。そんなことをやろうと思っているのですか?
デバッグモードでコンパイルし、GDBにロードしてバックトレースを取得します。 –
Pythonを呼び出す前にGILを保持していることを確認していますか? – ncoghlan
私は別の問題を見つけました。それは、より多くの可能性の高い犯人です(私の答えを見てください)。それでも動作しない場合は、http://docs.python.org/dev/c-api/init.html#threadstate-and-the-global-interpreterlockを使用して、十分にGoogleの飼い主を探してくださいCPythonインタプリタロックを処理する方法の説明に従う方が簡単です。 – ncoghlan