Python Cython Cimport未解析的外部符号
我的setup.py是:Python Cython Cimport未解析的外部符号,python,cython,Python,Cython,我的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(
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:未解析的外部符号\u npy\u expl
有什么想法吗?我已检查我的cython/includes/numpy/math.pxd是否有以下内容:
长双倍EXP“npy_EXP”(长双倍x)
有什么想法吗?可能为了保持简单,可以使用标准库中的
exp
,否则需要跳过一些障碍,才能使用npy\u expl
通常的Numpy API是仅头部的(更准确地说,在编译-/linktime时只需要头部,请参见),但数学函数的情况并非如此。还有define,它还将numpy的数学库显示为内联函数,但这在已安装的numpy分发版上不起作用,因为这些分发版缺少core/src
-文件夹,其中给出了数学函数的定义
因此,您必须将预编译文件添加到设置中。它可以在文件夹core/lib
中找到,并被称为(至少在linux上)libnpymath.a
最可靠的方法是使用get_info
fromnumpy.distutils.misc_util
,它返回一个字典,为'define_macros'
提供值,
“包含目录”
,“库”
和“库目录”
-即我们需要传递给扩展的值,例如
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
的函数get_mathlibs
,但它只有在\u numpyconfig.h
存在时才起作用,至少在我的安装中不是这样 可能为了保持简单,可以使用标准库中的exp
,否则需要跳过一些障碍,才能使用npy\u expl
使其工作
通常的Numpy API是仅头部的(更准确地说,在编译-/linktime时只需要头部,请参见),但数学函数的情况并非如此。还有define,它还将numpy的数学库显示为内联函数,但这在已安装的numpy分发版上不起作用,因为这些分发版缺少core/src
-文件夹,其中给出了数学函数的定义
因此,您必须将预编译文件添加到设置中。它可以在文件夹core/lib
中找到,并被称为(至少在linux上)libnpymath.a
最可靠的方法是使用get_info
fromnumpy.distutils.misc_util
,它返回一个字典,为'define_macros'
提供值,
“包含目录”
,“库”
和“库目录”
-即我们需要传递给扩展的值,例如
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
的函数get_mathlibs
,但它只有在\u numpyconfig.h
存在时才起作用,至少在我的安装中不是这样