[Tutor] Extension problem
Ali Alhakim
alika at spray.se
Fri Aug 10 13:23:35 CEST 2007
Hello!
I'm quiet new to Python and definitely a beginner in implementing Python extensions in C/C++. I've followed the structure given in the formal Python documentation to write the following code block:
===========
//cmatmod.c
#include <Python.h>
static unsigned int eigenvect_calc(double *min_eps)
{
return 5;
}
static PyObject *cmat_eigv(PyObject *self, PyObject *args)
{
double *min_eps;
unsigned int m;
if(!PyArg_ParseTuple(args, "d", &min_eps))
return NULL;
m=eigenvect_calc(min_eps);
return Py_BuildValue("I", m);
}
static PyMethodDef cmat_methods[]=
{
{ "eigenvect", cmat_eigv, METH_VARARGS, "Comment"},{NULL, NULL, 0, NULL}
};
void initcmat(void)
{
(void) Py_InitModule("cmat", cmat_methods);
}
===========
I have succeeded to build and install this extension using disutils package in the setup.py file below:
===========
from distutils.core import setup
from distutils.extension import Extension
setup(name='eigenvect',
version='1.0',
ext_modules=[Extension('cmat', ['cmatmod.c'])],
)
==========
But when I try to call eigenvect(3.0) from Python I would receive a core dump:
==========
6 [main] python 2336 _cygtls::handle_exceptions: Error while dumping state
(probably corrupted stack)
Segmentation fault (core dumped)
==========
My question is what is wrong with the extension code above? Is it something with reference counting?
I don't know which method is suitable for debugging extension codes. I've tried gdb but I didn't understand the debug information:
==========
(gdb) >>> eigenvect(4.0)
Program received signal SIGSEGV, Segmentation fault.
---Type <return> to continue, or q <return> to quit---
0x6abb248e in libpython2!PyEval_EvalFrameEx () from /usr/bin/libpython2.5dll
(gdb)
==========
/best regards
Spray Webbhotell. Ingen startkostnad, 3 månader gratis och fri support. Perfekt för dig som ska starta en egen webbplats. http://www.spray.se/kampanj
More information about the Tutor
mailing list