安装SQLite3引发的库问题
由于项目需要,需要用嵌入式数据库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下的,
也是不会被使用的.
添加完库后,最后程序运行正确: