error while loading shared libraries

error while loading shared libraries

原因

1 系統內無該共享庫,或者共享庫版本不對
2 系統內有,但按路徑查找不到

解決方法

1 修改環境變量LD_LIBRARY_PATH

詳情見原理

2 修改ld.so.conf

詳情見原理

3 創建軟連接

系統內有該共享庫,但不在搜索路徑下,可創建軟連接指向路徑 /usr/lib /lib /usr/lib/x86_64-linux-gnu/ ,等路徑.
該方法用於解決 Error loading shared library libhdf5_hl.so Error loading shared library libhdf5.so等錯誤.

原理

庫文件在連接(靜態庫和共享庫)和運行(僅限於使用共享庫的程序)時被使用,其搜索路徑是在系統中進行設置的。

一般 Linux 系統把 /lib 和 /usr/lib 兩個目錄作爲默認的庫搜索路徑,所以使用這兩個目錄中的庫時不需要進行設置搜索路徑即可直接使用。對於處於默認庫搜索路徑之外的庫,需要將庫的位置添加到 庫的搜索路徑之中。設置庫文件的搜索路徑有下列兩種方式,可任選其一使用:

1.修改環境變量LD_LIBRARY_PATH
在環境變量 LD_LIBRARY_PATH 中指明庫的搜索路徑。

#加入環境變臉
$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
#查看庫路徑
$ echo $LD_LIBRARY_PATH

2.修改配置文件ld.so.conf
在 /etc/ld.so.conf 文件中添加庫的搜索路徑。
將自己可能存放庫文件的路徑都加入到/etc/ld.so.conf 中是明智的選擇
添加方法也極其簡單,將庫文件的絕對路徑直接寫進去就OK了,一行一個。例如:
/etc/ld.so.conf是一個文件夾,其中可以根據自己需要建文件 **.conf ,存放某程序所需庫路徑

/usr/X11R6/lib
/usr/local/lib
/opt/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 以供使用。
在程序連接時,對於庫文件(靜態庫和共享庫)的搜索路徑,除了上面的設置方式之外,還可以通過 -L 參數顯式指定。因爲用 -L 設置的路徑將被優先搜索,所以在連接的時候通常都會以這種方式直接指定要連接的庫的路徑。

cite:
1. http://blog.sina.com.cn/s/blog_54f82cc201011ve4.html
2. https://www.cnblogs.com/Anker/p/3209876.html

發佈了54 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章