【发布时间】:2014-07-08 22:22:11
【问题描述】:
我正在尝试为基于 arm 的嵌入式设备交叉编译 Python 2.7.3。我已经成功地编译它(基于这些说明:http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html)并且所有测试都在目标设备上通过,所以我相信构建过程可以正常工作。我已经交叉编译了 sqlite3(版本 3.8.5)并将其包含在 python 交叉编译过程中,它似乎很好(它不再列在构建过程结束时未找到的模块中)。
我在实际尝试在目标设备上导入 sqlite3 库时遇到了困难,我收到下面列出的错误(python 使用 -v 标志运行)。
Python 2.7.3 (default, Jul 7 2014, 19:06:12)
[GCC 3.4.6] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
import sqlite3 # directory /mnt/card/arm-python/lib/python2.7/sqlite3
# /mnt/card/arm-python/lib/python2.7/sqlite3/__init__.pyc matches /mnt/card/arm-python/lib/python2.7/sqlite3/__init__.py
import sqlite3 # precompiled from /mnt/card/arm-python/lib/python2.7/sqlite3/__init__.pyc
# /mnt/card/arm-python/lib/python2.7/sqlite3/dbapi2.pyc matches /mnt/card/arm-python/lib/python2.7/sqlite3/dbapi2.py
import sqlite3.dbapi2 # precompiled from /mnt/card/arm-python/lib/python2.7/sqlite3/dbapi2.pyc
dlopen("/mnt/card/arm-python/lib/python2.7/lib-dynload/datetime.so", 2);
import datetime # dynamically loaded from /mnt/card/arm-python/lib/python2.7/lib-dynload/datetime.so
dlopen("/mnt/card/arm-python/lib/python2.7/lib-dynload/time.so", 2);
import time # dynamically loaded from /mnt/card/arm-python/lib/python2.7/lib-dynload/time.so
dlopen("/mnt/card/arm-python/lib/python2.7/lib-dynload/_sqlite3.so", 2);
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/mnt/card/arm-python/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
from dbapi2 import *
File "/mnt/card/arm-python/lib/python2.7/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: File not found
它似乎在抱怨“找不到文件”,但我已经浏览了输出中列出的所有路径,所有文件似乎都存在。我可以做些什么来进一步诊断这个问题?
【问题讨论】:
-
所以
_sqlite3.so存在于lib-dynload位置?此处的错误消息可能会产生误导,它只是无法加载库文件。 -
是的,文件存在于
/mnt/card/arm-python/lib/python2.7/lib-dynload/_sqlite3.so -
加载库看起来确实有问题,因为我将
_sqlite3.so移动到一个临时文件并将datetime.so复制到_sqlite3.so作为测试。在导入期间,它现在抱怨模块没有定义函数init_sqlite3,这表明它可以加载库。怀疑是sqlite3的交叉编译有问题。
标签: python sqlite arm cross-compiling embedded-linux