在Python 2.6.6上导入sqlite3时找不到共享库_sqlite3.so

时间:2012-09-12 09:58:43

标签: python sqlite embedded-linux python-2.6 dynamic-library

好的,我已经为此奋斗了2天,这通常意味着它太容易实现。

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

但是,_sqlite3.so库与例如json.so和ctypes.so array.so不在同一个位置... 在Python-2.6.6 / build / lib.linux868-2.6 /

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

由于缺少so-file,我尝试使用arm-compiler自己编译为共享库。这也不起作用。

没有手动编译的so-file:

>>> 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经验的人都知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

好的,想通了。不知怎的,我没有正确地手动编译SO文件。这样做是这样的:

首先来自setup.py,我为sqlite3模块添加了详细的调试功能。这增加了解决问题的打印输出:

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

这让我意识到setup.py选择了第一个路径,它找到了名为sqlite3的任何模块,完全忽略了它的架构。从setup.py中删除其他搜索路径,但是我在其中安装了ARM编译库,使其工作。 _sqlite3.so与所有其他模块很好地编译。

答案 1 :(得分:0)

尝试首先在您的系统上编译和安装sqlite3,然后再编译并安装python。或者只是

easy_install pysqlite