Estoy intentando poder utilizar desde Python librer�as creadas en C, por
lo que he podido ver el m�todo m�s sencillo es utilizar "swig", pero por
alg�n motivo esto no me funciona. He estado buscando diversos manuales
por internet y parece que todo fuese correcto, pero no tira.
Esto es lo que he hecho:
************************************************
*** Archivo prov.h:
typedef struct binary_data {
int size;
unsigned char* data;
} binary_data;
int insert(unsigned char *bytes, int len);
binary_data out();
*** Archivo prov.c:
#include "prov.h"
int length = 0;
unsigned char data[1024];
int insert(unsigned char *bytes, int len)
{
strncpy(data, bytes, len);
length = len;
}
binary_data out()
{
binary_data result;
result.size = length;
result.data = data;
return result;
}
*** Archivo prov.i:
%module prov
%{
#include "prov.h"
%}
%typemap(python,in) (unsigned char *bytes, int len)
{
if (!PyString_Check($input)) {
PyErr_SetString(PyExc_ValueError,"Expected a string");
return NULL;
}
$1 = PyString_AsString($input);
$2 = PyString_Size($input);
}
int insert(unsigned char *bytes, int len);
%typemap(out) binary_data {
$result = PyString_FromStringAndSize($1.data,$1.size);
}
binary_data out();
*** Archivo Makefile:
SWIG=/usr/bin/swig
CFLAGS=-DDEBUG -I/usr/include/python2.3 -I/usr/lib/python2.3/config
all: prov.so
prov.o prov_wrap.o: prov.i prov.c prov.h
$(SWIG) -python prov.i
gcc $(CFLAGS) -c prov.c prov_wrap.c
prov.so: prov_wrap.o prov.o
ld -shared prov.o prov_wrap.o -o prov.so
clean:
rm prov.o prov_wrap.* prov.so
****************************************************************
Tras crear todos estos ficheros, ejecuto "make" y la compilaci�n se hace
correctamente, generando el archivo prov.so
El problema viene cuando intento importar la librer�a en Python:
Python 2.3.2 (#2, Oct 6 2003, 08:02:06)
[GCC 3.3.2 20030908 (Debian prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import prov
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: dynamic module does not define init function (initprov)
Gracias por vuestra atenci�n.
--
Scero.
Jose Luis Nogueira Alonso.
http://scero.homelinux.org
GPG disponible en wwwkeys.pgp.net