3

好吧,我已经为此奋斗了 2 天,这通常意味着它太简单而无法实现。

我有一个嵌入式 linux 系统,我在我的 ubuntu 上交叉编译。在编译python时,sqlite3不在无法编译的模块列表中。

但是,_sqlite3.so 库与 Python-2.6.6/build/lib.linux868-2.6/ 中的 json.so 和 ctypes.so array.so... 等位置不同

具有 init-functions 等的实际模块位于 Python-2.6.6/modules 中的正确位置,它也可以在目标系统上找到。

由于缺少so文件,我尝试使用我的arm编译器将它自己编译为共享库。这也不起作用。

没有手动编译的so文件:

>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/__init__.py", line 24, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/dbapi2.py", line 27, in <module>
ImportError: /python/lib/python2.6/lib-dynload/_sqlite3.so: cannot open shared object file: No such file or directory

使用在 lib-dynloads 中找到的已编译共享库:

>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/__init__.py", line 24, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/dbapi2.py", line 27, in <module>
ImportError: dynamic module does not define init function (init_sqlite3)

编辑:我想知道我是否为 sqlite3 编译了正确的库。据我现在了解 _sqlite3.so 是 python 构建器制作的东西,而 libsqlite3.so 是它需要构建它的库吗?libsqlite3.so 是从 Sqlite3 源代码构建的。我在这里弄错了吗?

任何拥有更多嵌入式 Linux 或 Python 经验的人都知道我在这里做错了什么?

4

2 回答 2

1

尝试首先在您的系统上编译和安装 sqlite3,然后再编译 python。要不就

easy_install pysqlite
于 2012-09-12T11:01:33.197 回答
1

好的,想通了。不知何故,我没有正确手动编译 SO 文件。让它像这样工作:

首先从 setup.py ,我添加了为 sqlite3 模块启用的详细调试。这添加了解决问题的打印输出:

skipping incompatible /usr/lib/libsqlite3.so
cannot find -sqlite3

That made me realize that the setup.py had chosen the first path where it found any module named sqlite3, ignoring it's architecture alltogether. Removing other search paths from the setup.py, but the one i had the ARM compiled library in, made it work. The _sqlite3.so was compiled nicely with all the other modules.

于 2012-09-19T05:28:01.170 回答