[Numpy-discussion] PY_ARRAY_UNIQUE_SYMBOL
Robert Kern
robert.kern at gmail.com
Wed May 21 19:15:45 EDT 2008
On Wed, May 21, 2008 at 3:34 PM, Bill Spotz <wfspotz at sandia.gov> wrote:
> I am running into a problem with a numpy-compatible extension module
> that I develop, and I believe it has to do with PY_ARRAY_UNIQUE_SYMBOL.
>
> I set PY_ARRAY_UNIQUE_SYMBOL to "PyTrilinos".
Why? My understanding is also limited, but it does not appear to me to
be something one should change.
> On my machine (Mac OS
> X), the module loads and works properly. Another user, however (on
> Ubuntu), gets the following:
>
> ImportError: Failure linking new module: /usr/local/lib/python2.4/
> site-
> packages/PyTrilinos/_Epetra.so: Symbol not found: _PyTrilinos
> Referenced from: /usr/local/lib/libpytrilinos.dylib
> Expected in: dynamic lookup
??? How did an Ubuntu user get a hold of a .dylib?
> On my machine, I see:
>
> $ nm libpytrilinos.dylib | grep PyTrilinos
> U _PyTrilinos
> ...
>
> and I'm not sure where the symbol actually IS defined.
It gets generated into __multiarray_api.h:
#if defined(PY_ARRAY_UNIQUE_SYMBOL)
#define PyArray_API PY_ARRAY_UNIQUE_SYMBOL
#endif
#if defined(NO_IMPORT) || defined(NO_IMPORT_ARRAY)
extern void **PyArray_API;
#else
#if defined(PY_ARRAY_UNIQUE_SYMBOL)
void **PyArray_API;
#else
static void **PyArray_API=NULL;
#endif
#endif
How did this symbol end up in a .dylib rather than a Python extension
module? I think it might be difficult to arrange for a non-extension
dynamic library to call into numpy.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the NumPy-Discussion
mailing list