python - 通过 Cython 将 Python 转换为 C 后,得到未定义的符号 _Py_CheckRecursionLimit
问题描述
为了在 Android OS 中执行一段代码,其中一些涉及 Python 脚本,我通过 Cython 将 Python 脚本转换为 C,如下所示。setup.py 有这个:
from setuptools import setup
from Cython.Build import cythonize
from Cython.Compiler import Options
Options.embed = "main"
setup(
ext_modules = cythonize("make_region.pyx")
)
接下来,使用以下命令转换为 C:
python3 setup.py build_ext --inplace
生成make_region.c(注意:Python版本是3.10.0)然后编译make_region.c:
gcc make_region.c -o make_region.exe -I/home/me/PYTHON-3.10.0/include/python3.10 -L/home/me/PYTHON-3.10.0/lib -lpython3.10 -ldl -lm -lutil -lpthread
这产生了一个初始错误:没有名为 numpy.core._multiarray_umath 的模块。许多帖子建议通过以下方式解决此问题:
pip install numpy --upgrade
但是,这并没有解决我的问题,因此通过执行以下操作规避了此错误:
ln -s _multiarray_umath.cpython-37m-x86_64-linux-gnu.so _multiarray_umath.so
在 numpy/core 中(注意:我在工作目录中创建了 numpy 的本地副本)。编译 make_region.c 的新尝试正在产生:
numpy/core/_multiarray_umath.so: undefined symbol: _Py_CheckRecursionLimit
实际上,这个符号没有在这个共享对象库中定义,也没有在 numpy/core 中的任何 *.so 中定义。在https://bugs.python.org/issue41834出现了一些搜索,建议从 Python 3.9 版开始删除 _Py_CheckRecursionLimit 符号。但是,到目前为止,我在这个问题上没有看到任何关于 numpy 的内容。非常欢迎任何人对此问题提出任何建议/想法。
解决方案
推荐阅读
- .net - nuget 命令未在詹金斯管道中重新调整
- axios - axios稳定吗?
- php - 无法在多个php页面中获取登录用户信息
- amazon-web-services - 如何为 ec2 SpotFleet 实例定义 SecurityGroups 的对象列表
- javascript - 链接 index.html client.js 和 server.js
- java - 我想获取用户的 UID 以将特定评级存储在他们的详细信息中,但我无法访问特定用户
- c# - IDbConnection 的数据库连接模拟问题
- amazon-web-services - Selenium 在 AWS-batch 上失败
- node.js - Loopback 4 POST 方法给出 422 错误
- outlook - 在 Graph API 中为其他用户列出和创建任务