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
-------------------
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
-------------------