我的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/include/numpy/math.pxd是否有以下内容:
长双费“npy_expl”(长倍x)
有什么想法吗?
发布于 2019-03-03 13:47:21
可能是为了保持简单,我们可以从标准库中使用exp,否则就会有一些跳转,以使它与npy_expl一起工作。
通常的Numpy-API只使用头(更准确地说,只有头在编译/链接时才需要,参见这里),但数学函数的情况并非如此。有定义NPY_INLINE_MATH,它也会将numpy的数学库表示为内联函数,但是这不能在已安装的numpy-distributionen上工作,因为它们缺少core/src-folder,其中给出了数学函数的定义。
因此,您必须将预编译的静态numpy数学库添加到您的设置中。它可以在文件夹core/lib中找到,并被称为(至少在linux上) libnpymath.a。
最健壮的方法是使用来自get_info的numpy.distutils.misc_util,它返回一个为'define_macros'、'include_dirs'、'libraries'和'library_dirs'提供值的字典--即我们需要传递给扩展的值。
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from numpy.distutils.misc_util import get_info
npymath_info = get_info('npymath')
extensions = [
Extension('_hmmc', ['_hmmc.pyx'],
**npymath_info
),
]
setup(
ext_modules = cythonize(extensions)
)还有来自numpy.distutils.misc_util的函数numpy.distutils.misc_util,但只有当_numpyconfig.h存在时,它才能工作,至少在我的安装中不是这样。
https://stackoverflow.com/questions/54960793
复制相似问题