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

Shared library _sqlite3.so not found when importing sqlite3 on Python 2.6.6

好吧,我已经为此奋斗了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中,它也可以在目标系统上找到。

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

没有手动编译的so-file:

1
2
3
4
5
6
>>> 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中找到的已编译共享库:

1
2
3
4
5
6
>>> 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经验的人都知道我在这里做错了吗?


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

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

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

这使我意识到setup.py选择了找到所有名为sqlite3的模块的第一个路径,而完全忽略了它的体系结构。从setup.py中删除其他搜索路径,但是我拥有ARM编译库的路径使它可以工作。 _sqlite3.so与所有其他模块均已很好地编译。


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

1
easy_install pysqlite