Linuz Python Module using PythonC/ API

D

David

I have this error message poping up when I try to import a module I made in C
using the Python/C API. Everything compiles like a charm.

Gives me this error message :

Traceback (most recent call last):
File "mod_test.py", line 4, in ?
import utm
ImportError: dynamic module does not define init function (initutm)

but the "initutm" function is there.

Running on Fedora Core 3.

Thanx
David

P.S Other question is there a command to know what export symbols a .so library
has ?

Relevant files below.

utmmodule.c
------------------
#include <Python.h>

#include "utm.h"


PyMODINIT_FUNC initutm(void);

static PyObject * utm_utm_to_ll(PyObject * self, PyObject * args);

static PyObject * utm_ll_to_utm(PyObject * self, PyObject * args);

static PyObject * utm_zone(PyObject * self, PyObject * args);

static PyObject * utm_grid(PyObject * self, PyObject * args);

static PyObject * utm_trans_list(PyObject * self, PyObject * args);

static PyObject * utm_transform(PyObject * self, PyObject * args);



/****************************************/

/*! \var static PyObject * UTMError

\brief UTM Python Module error handling object

*/

/****************************************/

static PyObject * UTMError;



/****************************************/

/*! \var static PyMethodDef UTMMethods

\brief UTM Python Module function list

*/

/****************************************/

static PyMethodDef UTMMethods[] = {



{"utm_to_ll", utm_utm_to_ll, METH_VARARGS, "Converts UTM coordinates to
Lat/Long using the input UTM zone number and letter and tranformation."},

{"ll_to_utm", utm_ll_to_utm, METH_VARARGS, "Converts Lat/Long coordinates to
UTM using the input transformation."},

{"zone", utm_zone, METH_VARARGS, "Returns the UTM longitude zone number."},

{"grid", utm_grid, METH_VARARGS, "Returns the UTM latitude zone letter (C to
X) - omiting chars I and O.\nReturns Z if Latitude value out of UTM bounds 84N -
80S."},

{"trans_list", utm_trans_list, METH_VARARGS, "Returns the list of available
ellipsoid transformations in a list."},

{"transform", utm_transform, METH_VARARGS, "Returns the tranform index based
on the transform type string, EX: 'WGS 84' returns index 29"},

{NULL, NULL, 0, NULL} /* Sentinel */

};



/****************************************/

/*! \fn PyMODINIT_FUNC initutm(void)

\brief Python Module __init__() function



This function is called when the module is loaded by Python. It creates a
mapping of the

python module commands linked to their C counterpart in the DLL/SO module.
It also creates

an error handling Python object (UTMError).

*/

/****************************************/



PyMODINIT_FUNC initutm(void) {



PyObject *m;



m = Py_InitModule( "utm", UTMMethods );



UTMError = PyErr_NewException( "utm.error", NULL, NULL );

Py_INCREF( UTMError );

PyModule_AddObject( m, "error", UTMError );

}
.....
------------------

makefile important lines
-------------------
CC=g++

CFLAGS=-Wall -I/usr/local/src/Python-2.3.5/Include
-L/usr/local/src/Python-2.3.5/Objects -L/usr/local/src/Python-2.3.5

LDFLAGS=



all: main



main: utm.o utmmodule.o

$(CC) $(CFLAGS) -shared -fPIC -Xlinker -export-dynamic -lpython2.3 -o utm.so

-------------------
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top