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

也是不會被使用的.

添加完庫后,最后程序運行正確:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM