Hi there,
I'm using Python 2.4.1 on Ubuntu Linux, and I'm having problems
extending python in C:
The C code is below:
#include
#include "ni488.h"
static PyObject *
gpib_hello(PyObject *self, PyObject *args)
{
char *command;
int *secondarg;
// int sts;
if (!PyArg_ParseTuple(args, "|si", &command, &secondarg)) //both
arguments are optional
return NULL;
// TODO: Inserting code for the function here!
// FROM HERE
int Device = 0; /* Device unit descriptor*/
int BoardIndex = 0; /* Interface Index*/
int PrimaryAddress = 13; /* Pri addr of the device */
int SecondaryAddress = 0;/* Sec addr of the device */
Device = ibdev(/* Create a unit descriptor handle */
BoardIndex, /* Board Index*/
PrimaryAddress, /* Device pri addr */
SecondaryAddress,/* Device sec addr*/
T10s,/* Timeout setting = 10 seconds */
1, /* Assert EOI line at end of write */
0); /* EOS termination mode */
// TO HERE IS THE GPIB STUFF
return Py_BuildValue("s", "hello world");
}
static PyMethodDef gpibMethods[] = {
/* ... */
{"hello", gpib_hello, METH_VARARGS,
"Get Hello world returned."},
/* ... */
{NULL, NULL, 0, NULL}/* Sentinel */
};
PyMODINIT_FUNC
initgpib(void)
{
(void) Py_InitModule("gpib", gpibMethods);
}
As you can see, it's the standard "spammodule" example, with "spam"
replaced with "gpib", an extra include (ni488) and that block of code
added. This compiles absolutely faultlessly (even no warnings!) using
the python script:
from distutils.core import setup, Extension
module1 = Extension('gpibmodule',
sources = ['gpibmodule.c'])
setup (name = 'gpibmodule',
version = '0.0.1',
description = 'This is the gpib package',
ext_modules = [module1])
However, when I open up the python command line, and type "from gpib
import *" or "import gpib" I get "ImportError: /usr/.../gpibmodule.so:
undefined symbol: ibdev" -- but I know it's defined in the ni488.h
file, especially as I can use this code from actual C programs without
problems. The ni488.h file in in the right place to be used for C
compilation.
So, the question is, what did I type wrong? Why is python examining
that c function embedded in another, surely it should only be
interested in providing arguments and getting returned values, and what
the c function does is its own bussiness?
Any help would be hugely appreceated!
Thanks
Alex
--
http://mail.python.org/mailman/listinfo/python-list