现在的位置: 首页 > 综合 > 正文

安装SQLite3引发的库问题

2013年05月05日 ⁄ 综合 ⁄ 共 1104字 ⁄ 字号 评论关闭

由于项目需要,需要用嵌入式数据库SQLite3搭建数据库。首先当然是要安装SQLite啦。

从官网下了安装包,读完README和INSTALL,发现安装过程很简单,还是老三式:

./configure、make 和 make install。但是在安装好之后,程序还是无法运行,出现错误:

ERROR:SQLite header and source version mismatch

 

百度了之后,原始是: 由于sqlite默认安装到了/usr/local/lib中,但系统有一个旧的sqlite库,

存放在/usr/lib /i386-linux-gnu里,而这个目录被搜索的优先级目测应该高于/usr/local/lib。删掉

这里面的就库文件就可以运行了。

于是,我把旧的libsqlite3.so.0,libsqlite3.so.0.8.6删除了,但是依然还是那个原来的错误。

 

其实, linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时

不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置

添加到库的搜索路径之中。于是,就要给sqlite库文件的路径添加进去——在 /etc/ld.so.conf 文件中

添加库的搜索路径:/usr/local/lib。

 

但是,这也只是对程序要链接到的库的定位,但是对于使用了共享库的程序的执行还是不够的。为了

加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以是直接读取

库列表文件 /etc/ld.so.cache 从中进行搜索的。  /etc/ld.so.cache 是一个非文本的数据文件,不能直接编辑。

它是根据 /etc/ld.so.conf 中设置的搜索路径,由 /sbin/ldconfig 命令将这些搜索路径下的共享库文件集中

在一起而生成的(ldconfig 命令要以 root 权限执行)。因此,为了保证程序执行时对库的定位,在

/etc/ld.so.conf 中进行了库搜索路径的设置之后,还必须要运行 /sbin/ldconfig 命令

更新/etc/ld.so.cache 文件之后才可以。

 

ldconfig ,简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache 以供使用。

因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下

/sbin/ldconfig使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,

也是不会被使用的.

添加完库后,最后程序运行正确:

 

 

抱歉!评论已关闭.