完整免责声明:过去6周我一直在使用buildroot。这是我对嵌入式Linux的第一次介绍,因此我还是个新手,但我自己已经解决了99%的问题。在很大程度上,这一过程是直截了当的
所以,当我被困在家里无法工作时,我一直在做一个嵌入式硬件项目。我已经选择了我的硬件,构建了一个原型,学习了buildroot基础知识,提出了基本系统,优化了内核配置,为我的硬件构建了一个定制的设备树,到目前为止我都很高兴
同时,我一直在桌面上用python编程目标应用程序,它依赖于几个库(硬件抽象、通信、显示等),但相对来说比较简单
我已经有了一个必要的包列表,可以构建到我的buildroot系统中。buildroot工具在这里使用scanpypi工具非常好:
~/buildroot$ utils/scanpypi diskcache -o package
只需将所有依赖项添加到/package/config.in中,就可以在menuconfig中选择它们并添加到配方中
问题出现在构建时,对于python diskcache之上的模块,python模块的构建失败
它依赖于一些东西,但有一个是slqite3,它被添加为: 核心python模块“sqlite模块” 外部包“python-pysqlite3” 图书馆>;数据库>;sqlite
但是,它在构建时失败:
>>> python-diskcache 4.1.0 Building
Traceback (most recent call last):
File "setup.py", line 5, in <module>
import diskcache
File "/home/buildroot/output/build/python-diskcache-4.1.0/diskcache/__init__.py", line 9, in <module>
from .core import Cache, Disk, EmptyDirWarning, JSONDisk, UnknownFileWarning, Timeout
File "/home/buildroot/output/build/python-diskcache-4.1.0/diskcache/core.py", line 14, in <module>
import sqlite3
File "/home/buildroot/output/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/python3.8/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/home/buildroot/output/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/python3.8/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'
make[1]: *** [package/pkg-generic.mk:269: /home/buildroot/output/build/python-diskcache-4.1.0/.stamp_built] Error 1
make: *** [Makefile:84: _all] Error 2
在寻找解决方案时,似乎_sqlite3是python外部的C模块,用于与sqlite数据库通信。它应该与python一起安装(使用3.8),并且应该在buildroot中启用核心sqlite模块
有几个修复程序可以在主机上处理此问题(例如,apt get install libsqlite3 dev和重新安装/重新配置python)。显然,这在映像中是不可能的,sqlite和python3安装都是最新版本,并且在构建时安装到映像中
我真的很难理解这个问题,或者我该如何解决它。我有一些基于讨论的理论,但我不确定
1)python是在sqlite之前安装到映像中的,因此相应的模块没有将cp或符号链接安装到python安装中
2)在构建时没有满足某些其他未知依赖项,并且该依赖项以静默方式失败
任何想法或帮助都将不胜感激
谢谢
问题在于,构建机器上的Python会找到交叉编译的sqlite3模块,它无法加载该模块,因为它用于错误的体系结构
这通常不会发生,因为安装脚本通常不会去加载它试图构建/安装的包
一种解决方法是安装diskcache所有依赖项的主机版本,并在
DISKCACHE_ENV
中设置PYTHONPATH=$(HOST_DIR)/lib/python$(PYTHON3_VERSION_MAJOR)/:$(PYTHON3_PATH)
。但是,这可能会导致各种其他破损因此,更好的解决方案是修补diskcache的setup.py脚本,这样它就不会尝试导入diskcache本身。它可能只是为了得到一个版本号或类似的东西;这可以通过将版本号移动到单独的文件中并加载该文件来解决
相关问题 更多 >
编程相关推荐