gpt4 book ai didi

python - Cython Cimport 无法解析的外部符号

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:36 43 4
gpt4 key购买 nike

我的 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))

但是,错误是

error LNK2001: unresolved external symbol _npy_expl

有什么想法吗?我检查过我的 cython/includes/numpy/math.pxd 是否有这个:

long double expl "npy_expl"(long double x)

有什么想法吗?

最佳答案

可能为了简单起见,可以使用标准库中的 exp,否则需要跳过一些环节才能使其与 npy_expl 一起使用。

通常的 Numpy-API 是仅 header 的(更准确地说,在编译/链接时只需要 header ,请参阅 here ),但数学函数的情况并非如此。有定义NPY_INLINE_MATH ,这也会将 numpy 的数学库呈现为内联函数,但这不适用于已安装的 numpy-distributionen,因为它们缺少给出数学函数定义的 core/src 文件夹。

所以你必须添加预编译的static numpy's math library到你的设置。它可以在文件夹 core/lib 中找到,并被称为(至少在 Linux 上)libnpymath.a

最可靠的方法是使用 numpy.distutils.misc_util 中的 get_info,它返回一个为 '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的函数get_mathlibs,但它仅在_numpyconfig.h存在时才有效,而_numpyconfig.h不存在至少在我的安装中是这样。

关于python - Cython Cimport 无法解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54960793/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com