[Numpy-discussion] npy_log2 undefined on Linux

David Cournapeau cournape at gmail.com
Sun Oct 26 02:26:06 EDT 2014


Not exactly: if you build numpy with mingw (as is the official binary), you
need to build everything that uses numpy C API with it.

On Sun, Oct 26, 2014 at 1:22 AM, Matthew Brett <matthew.brett at gmail.com>
wrote:

> On Sat, Oct 25, 2014 at 2:15 PM, Matthew Brett <matthew.brett at gmail.com>
> wrote:
> > On Fri, Oct 24, 2014 at 6:04 PM, Matthew Brett <matthew.brett at gmail.com>
> wrote:
> >> Hi,
> >>
> >> We (dipy developers) have a hit a new problem trying to use the
> >> ``npy_log`` C function in our code.
> >>
> >> Specifically, on Linux, but not on Mac or Windows, we are getting
> >> errors of form:
> >>
> >> ImportError: /path/to/extension/distances.cpython-34m.so: undefined
> >> symbol: npy_log2
> >>
> >> when compiling something like:
> >>
> >> <eg_log.pyx>
> >> import numpy as np
> >> cimport numpy as cnp
> >>
> >> cdef extern from "numpy/npy_math.h" nogil:
> >>     double npy_log(double x)
> >>
> >>
> >> def use_log(double val):
> >>     return npy_log(val)
> >> </eg_log.pyx>
> >>
> >> See : https://github.com/matthew-brett/mincy/tree/npy_log_example for
> >> a self-contained example that replicates the failure with ``make``.
> >>
> >> I guess this means that the code referred to by ``npy_log`` is not on
> >> the ordinary runtime path on Linux?
> >
> > To answer my own question - npy_log is defined in ``libnpymath.a``, in
> > <numpy>/core/lib.
> >
> > The hint I needed was in
> >
> https://github.com/numpy/numpy/blob/master/doc/source/reference/c-api.coremath.rst
> >
> > The correct setup.py is:
> >
> > <setup.py>
> > from distutils.core import setup
> > from distutils.extension import Extension
> > from Cython.Distutils import build_ext
> >
> > from numpy.distutils.misc_util import get_info
> > npm_info = get_info('npymath')
> >
> > ext_modules = [Extension("eg_log", ["eg_log.pyx"],
> >                          **npm_info)]
> >
> > setup(
> >   name = 'eg_log',
> >   cmdclass = {'build_ext': build_ext},
> >   ext_modules = ext_modules
> > )
> > </setup.py>
>
> Ah, except this doesn't work on Windows, compiling with Visual Studio:
>
> LINK : fatal error LNK1181: cannot open input file 'npymath.lib'
>
> Investigating, c:\Python27\Lib\site-packages\numpy\core\lib has only
> `libnpymath.a``; I guess this isn't going to work for Visual Studio.
> Is this a bug?
>
> Cheers,
>
> Matthew
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20141026/cacd2179/attachment.html>


More information about the NumPy-Discussion mailing list