Cython Cimport неразрешенный внешний символ

1

Мои setup.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np

extensions = [
    Extension('_hmmc', ['_hmmc.pyx'], include_dirs = [np.get_include()]),
    ]

setup(
    ext_modules = cythonize(extensions)
    )

и я экспериментирую с cimport, чтобы заставить его работать.

from numpy.math cimport expl

import numpy as np
print(expl(5-2))

Тем не менее, ошибки

ошибка LNK2001: неразрешенный внешний символ _npy_expl

Любая идея? Я проверил, что мой cython/includes/numpy/math.pxd имел это:

long double expl "npy_expl" (long double x)

Есть идеи?

Теги:
cython

1 ответ

0
Лучший ответ

Вероятно, для простоты, можно использовать exp из стандартной библиотеки, в противном случае есть несколько npy_expl через которые можно перейти с помощью npy_expl.

Обычный Numpy-API предназначен только для заголовков, но это не относится к математическим функциям. Существует определение NPY_INLINE_MATH, которое также представляет библиотеку numpy math как встроенные функции, но это не будет работать на установленных numpy-distributionen, поскольку в них отсутствует core/src -folder, где даны определения математических функций.

Таким образом, вы должны добавить предварительно скомпилированную статическую библиотеку numpy math к вашей установке. Его можно найти в папке core/lib и называется (по крайней мере, в Linux) libnpymath.a:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np

import os
npymath_path = os.path.join(os.path.dirname(np.get_include()), 'lib')

extensions = [
    Extension('_hmmc', ['_hmmc.pyx'], 
               include_dirs = [np.get_include()],
               libraries = ['npymath'],
               library_dirs=[npymath_path]
               ),
    ]

setup(
    ext_modules = cythonize(extensions)
    )

Я не знаю лучшего способа получить npymath_path: есть функция get_mathlibs из numpy.distutils.misc_util но она работает только в случае _numpyconfig.h что не так, по крайней мере, в моей установке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню