首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cython Cimport未解析外部符号

Cython Cimport未解析外部符号
EN

Stack Overflow用户
提问于 2019-03-02 16:52:14
回答 1查看 692关注 0票数 1

我的setup.py是:

代码语言:javascript
复制
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做实验,让它开始工作。

代码语言:javascript
复制
from numpy.math cimport expl

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

然而,错误是

错误LNK2001:未解析的外部符号_npy_expl

有什么想法吗?我已经检查了我的cython/include/numpy/math.pxd是否有以下内容:

长双费“npy_expl”(长倍x)

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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_infonumpy.distutils.misc_util,它返回一个为'define_macros''include_dirs''libraries''library_dirs'提供值的字典--即我们需要传递给扩展的值。

代码语言:javascript
复制
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存在时,它才能工作,至少在我的安装中不是这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54960793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档