關於報錯:import _mysql ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory


  昨天部署在CentOS Linux release 7.2.1511 (Core)上的自動化測試腳本,突然報錯了“import _mysql ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory”。

  百度了下,說是MySQLdb是需要調用MySQL的c動態鏈接庫。想了下,可能是最近剛好把自動化測試的數據庫被遷到另外一個服務器,腳本所在服務器的MySQL也被卸載了,然后找不到那個庫。

  解決方法:1. 先找找系統中有沒有這個庫:find -name  libmysqlclient.so.18 

       2.將libmysqlclient.so.18 鏈接到/usr/lib64中:ln -s /usr/java/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

  為什么是鏈接到/usr/lib64?

Linux 運行的時候,是如何管理共享庫(*.so)的?在 Linux 下面,共享庫的尋找和加載是由 /lib/ld.so 實現的。 ld.so 在標准路經(/lib, /usr/lib) 中尋找應用程序用到的共享庫。

但是,如果需要用到的共享庫在非標准路經,ld.so 怎么找到它呢?

目前,Linux 通用的做法是將非標准路經加入 /etc/ld.so.conf,然后運行 ldconfig 生成 /etc/ld.so.cache。 ld.so 加載共享庫的時候,會從 ld.so.cache 查找。

傳統上,Linux 的先輩 Unix 還有一個環境變量:LD_LIBRARY_PATH 來處理非標准路經的共享庫。ld.so 加載共享庫的時候,也會查找這個變量所設置的路經。

 

參考:http://james23dier.iteye.com/blog/763274

   http://xummer26.com/blog/setup-mysqldb.html

  


免責聲明!

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



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