2012-09-12 43 views
2

好的,我一直在为此奋战2天,这通常意味着它太简单了,无法实现。在Python 2.6.6上导入sqlite3时找不到共享库_sqlite3.so

我有一个嵌入式Linux系统,我在我的Ubuntu上进行交叉编译。编译python时,sqlite3不在未能编译的模块列表中。

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

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

由于这个文件丢失了,我试图使用我的arm编译器自己编译为一个共享库。这也没有用。

,而无需手动编译,以便文件:

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

回答

1

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

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

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

这让我意识到,setup.py选择了在那里找到的任何模块名为sqlite3的第一路径,忽略它的建筑产品总数。从setup.py中删除其他搜索路径,但是我拥有ARM编译库的那个搜索路径使其工作。 _sqlite3.so与所有其他模块一起编译得很好。

0

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

easy_install pysqlite 
+0

我的系统是指嵌入式系统还是主机系统?无论如何,目前,我已经在我的主机系统上开发了sqlite3,包括开发文件。在目标系统上,我在构建python之前构建sqlite3,并且将虚拟文件系统的安装目录包含到sqlite模块编译searchdirs中。我将不得不看看这个easy_install在makefile上是否可用。 – Gjordis

+0

目标系统当然。 –

+0

是的,我先在目录结构上安装sqlite3,后来进入sy​​stem.img – Gjordis