• 安装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下的,

    也是不会被使用的.

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

     

     

  • 相关阅读:
    Java多线程总结
    Linux命令总结
    Java笔记
    JDK7和JDK8一些重要新特性
    第八周(11.04-11.10)----每周报告
    第八周(11.04-11.10)----结对项目----逆波兰
    第八周(11.04-11.10)----个人作业----历年学生作品点评
    第七周PSP(10.27-11.03)
    第七周(10.27-11.03)----补交第六周(10.20-26)每周例行报告
    个人项目----词频统计WEB(部分功能)
  • 原文地址:https://www.cnblogs.com/chenwu128/p/2853652.html
Copyright © 2020-2023  润新知