有没有办法交叉编译由 Cython 为 ARM9 创建的 C 代码?

如何解决有没有办法交叉编译由 Cython 为 ARM9 创建的 C 代码?

我在 Windows 10 上使用 Eclipse。用 PyDev 编写的 HelloWorld.pyx 测试程序被 Cython 以常用的方式使用 setup.py 程序转换为 HelloWorld.c。

from setuptools import setup
from Cython.Build import cythonize


setup (
    name='HelloWorldCython',ext_modules=cythonize('HelloWorld.pyx'),zip_safe=False
    )

生成的 HelloWorld.c 包含许多 python 头文件。

在 Eclipse 项目中,我使用“xPack GNU Arm Embedded GCC (arm-none-eabi-gcc)”作为“ARM (AArch32) 架构的工具链,并选择了 arm926ej-s Arm 系列 (-mcpu)”我的目标核心。如果我现在尝试在 Eclipse 中构建项目,对于包括“io.h”、“Python.h”和“pyconfig”在内的许多头文件,我会收到许多致命错误,提示“没有这样的文件或目录” .h”。

我从 https://www.python.org/downloads/release/python-390/ 下载了 Python 3.9.0 的“Gzipped 源代码 tarball”,解压后将 Python3.9.0\Include 添加到 Arm Cross Compiler 包含路径 (-I),用于“Python.h”、Python3 .9.0\PC 表示“pyconfig.h”,Python\3.9.0\Modules_decimal\libmpdec 表示“io.h”。现在我收到了无穷无尽的错误,从这个开始:

make all 
'Building file: ../helloworldCython.c'
'Invoking: GNU Arm Cross C Compiler'
arm-none-eabi-gcc -mcpu=arm926ej-s -mthumb -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g3 -I"C:\Users\jonas\Downloads\xxx\Python-3.9.0\Include" -I"C:\Users\jonas\Downloads\xxx\Python-3.9.0\Modules\_decimal\libmpdec" -I"C:\Users\jonas\Downloads\xxx\Python-3.9.0\PC" -std=gnu11 -MMD -MP -MF"helloworldCython.d" -MT"helloworldCython.o" -c -o "helloworldCython.o" "../helloworldCython.c"
In file included from C:\Users\jonas\Downloads\xxx\Python-3.9.0\Modules\_decimal\libmpdec/io.h:33,from C:\Users\jonas\Downloads\xxx\Python-3.9.0\PC/pyconfig.h:59,from C:\Users\jonas\Downloads\xxx\Python-3.9.0\Include/Python.h:8,from ../helloworldCython.c:18:
C:\Users\jonas\Downloads\xxx\Python-3.9.0\Modules\_decimal\libmpdec/mpdecimal.h:213:4: error: #error "define CONFIG_64 or CONFIG_32"
 213 |   #error "define CONFIG_64 or CONFIG_32"
     |    ^~~~~
C:\Users\jonas\Downloads\xxx\Python-3.9.0\Modules\_decimal\libmpdec/mpdecimal.h:247:5: error: unknown type name 'mpd_ssize_t'
 247 |     mpd_ssize_t prec;   /* precision */
     |     ^~~~~~~~~~~
C:\Users\jonas\Downloads\xxx\Python-3.9.0\Modules\_decimal\libmpdec/mpdecimal.h:248:5: error: unknown type name 'mpd_ssize_t'
 248 |     mpd_ssize_t emax;   /* max positive exp */
     |     ^~~~~~~~~~~
C:\Users\jonas\Downloads\xxx\Python-3.9.0\Modules\_decimal\libmpdec/mpdecimal.h:249:5: error: unknown type name 'mpd_ssize_t'
 249 |     mpd_ssize_t emin;   /* min negative exp */
     |     ^~~~~~~~~~~

... 等等(134 个错误)。 64 位或 32 位定义似乎有问题。

为了解决这个问题,我使用以下配置命令行在 Python3.9.0 源代码上运行 ./configure:

./configure --prefix=/jonas/eclipse-workspace/PythonARM9_2 --exec-prefix=/jonas/eclipse-workspace/PythonARM9_2/ARMPREFIX --with-universal-archs=32-bit --target=arm-noneeabi-gcc ac_cv_pthread_is_default=yes --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no

这会创建一个新的“pyconfig.h”,我将 Eclipse 项目包含的旧“pyconfig.h”替换为新的。

当我现在尝试构建项目时,我得到:

12:01:20 **** Incremental Build of configuration Debug for project pyCtest2 ****
make all 
'Building file: ../helloworldCython.c'
'Invoking: GNU Arm Cross C Compiler'
arm-none-eabi-gcc -mcpu=arm926ej-s -mthumb -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g3 -I"C:\Users\jonas\Downloads\xxx\Python-3.9.0\Include" -I"C:\Users\jonas\Downloads\xxx\Python-3.9.0\Modules\_decimal\libmpdec" -I"C:\Users\jonas\Downloads\xxx\Python-3.9.0" -std=gnu11 -MMD -MP -MF"helloworldCython.d" -MT"helloworldCython.o" -c -o "helloworldCython.o" "../helloworldCython.c"
In file included from C:\Users\jonas\Downloads\xxx\Python-3.9.0\Include/Python.h:8,from ../helloworldCython.c:18:
C:\Users\jonas\Downloads\xxx\Python-3.9.0/pyconfig.h:1656:15: error: two or more data types in declaration specifiers
 1656 | #define uid_t int
      |               ^~~
C:\Users\jonas\Downloads\xxx\Python-3.9.0/pyconfig.h:1635:15: error: two or more data types in declaration specifiers
 1635 | #define gid_t int
      |               ^~~
In file included from C:\Users\jonas\Downloads\xxx\Python-3.9.0\Include/Python.h:136,from ../helloworldCython.c:18:
C:\Users\jonas\Downloads\xxx\Python-3.9.0\Include/pythread.h:136:5: error: #error "Require native threads. See https://bugs.python.org/issue31370"
  136 | #   error "Require native threads. See https://bugs.python.org/issue31370"
      |     ^~~~~
C:\Users\jonas\Downloads\xxx\Python-3.9.0\Include/pythread.h:145:5: error: unknown type name 'NATIVE_TSS_KEY_T'
  145 |     NATIVE_TSS_KEY_T _key;
      |     ^~~~~~~~~~~~~~~~
make: *** [helloworldCython.o] Fehler 1
"make all" terminated with exit code 2. Build might be incomplete.

12:01:20 Build Failed. 5 errors,0 warnings. (took 530ms)

我知道这可能不是很多人试图实现的目标。我对这个话题很陌生,如果有人发现这种方法有错误,或者可以给我一个关于将 Python 代码转换为 C 并为 ARM926ej-s 嵌入式处理器交叉编译的不同方法的提示,我会非常高兴。>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res