You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cython转Python脚本为C代码后运行出现PyObject_SelfIter未定义错误

问题解决:numpy动态库找不到PyObject_SelfIter符号

核心原因

PyObject_SelfIter是Python 3.10新增的API,而你使用的是Python 3.9,当前安装的numpy版本是基于Python 3.10+编译的,导致动态库依赖了3.9不存在的符号;同时静态链接场景下,可执行文件的符号默认不对外导出,动态加载的numpy库无法访问静态链接的Python库中的符号。

解决方法

  • 匹配numpy与Python版本
    安装适配Python 3.9的numpy版本,比如指定版本安装:

    pip install numpy<1.26
    

    (numpy 1.26及以上版本要求Python 3.10+,无法在3.9环境正常工作)

  • 调整编译参数,导出静态符号
    编译时添加-Wl,-export-dynamic参数,让可执行文件导出所有静态链接的符号,供动态加载的numpy库调用:

    gcc -static -Wl,-export-dynamic test.c -I/home/me/Python-3.9.12/include/python3.9 -o test.exe -L/home/me/Python-3.9.12/lib -lpython3.9 -lpthread -lutil -lrt -lm -ldl
    

    即使去掉-static,也建议添加该参数,确保动态库能找到可执行文件中的符号。

  • 适配Android交叉编译环境
    你当前使用的numpy是x86_64-linux-gnu架构的,无法在Android(arm/aarch64架构)运行。需要:

    1. 使用Android NDK提供的交叉编译工具链;
    2. 用该工具链重新编译Python 3.9;
    3. 在交叉编译环境下安装/编译适配的numpy版本,确保所有依赖库的架构与Android一致。
  • 重新编译numpy(可选)
    如果找不到预编译的适配包,可在当前Python 3.9环境下从源码编译numpy,确保编译过程链接到本地的Python 3.9库:

    pip install --no-binary :all: numpy==1.25.2
    

内容的提问来源于stack exchange,提问作者user3063547

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:35:22