解決Linux可執(zhí)行文件目錄下明明存在*.so文件,但卻提示找不到
加載機制的問題
在Linux上,動態(tài)庫的加載機制和在Windows上完全不一樣
其實應該叫做【共享庫】才對,動態(tài)庫是Windows的概念,Windows上為*.dll,Linux上為*.so。
- dll:dynamic link library,即:動態(tài)鏈接庫。
- so:share object(library),即:共享庫。
1、在Windows上
一個可執(zhí)行程序會先在當前目錄下找需要的動態(tài)庫(*.dll)文件,如果當前目錄下有,則加載。
如果當前目錄沒有,才會去系統的環(huán)境變量目錄下去找,如果找到了,則加載,如果連環(huán)境變量中都找不到,將報錯。
2、在Linux上
一個可執(zhí)行程序會直接去 “環(huán)境變量目錄下” 找共享庫(*.so),如果找不到,則報錯。
“環(huán)境變量目錄下” 打了引號,因為這更像是一個專門用于【共享庫】的環(huán)境變量,Linux的環(huán)境變量應該是PATH(可在終端輸入這個查看:echo $PATH),PATH跟Windows上的環(huán)境變量又不一樣,PATH描述的是Linux命令的一個路徑,而Windows上的環(huán)境變量描述的是命令 + 庫。
Linux的庫的加載,由 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf 來進行加載的,不妨一個一個打開看看就一切都明白了。
3、解決問題
(其實如果2中打開看了 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf就已經懂了,無論看沒看,想直接解決問題,請看一下操作)
①將.so文件路徑的目錄添加到/etc/ld.so.conf
sudo vim /etc/ld.so.conf
方法1:在文件末行,添加自己的庫的路徑。
方法2:將自己的庫,復制到ld.so.conf文件中的其中一個路徑下(如:/usr/lib 或 /usr/local/lib。推薦/usr/local/lib,能夠避免受到Linux升級的影響)。
②讓①中的修改生效
sudo /sbin/ldconfig
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
在Apache服務器上啟用GZip壓縮靜態(tài)內容的方法
這篇文章主要介紹了在Apache服務器上啟用GZip壓縮靜態(tài)內容的方法,通過配置.htaccess文件即可輕松實現,同時附帶了一些GZip的常用命令,需要的朋友可以參考下2015-08-08解決atd服務報錯Failed with result‘exit-code‘問題
在isoftserveros-v5.1-oe1-aarch64系統中,安裝at軟件包后,由于手動執(zhí)行導致atd守護進程出錯,通過查看后臺Process行,手動kill原atd進程,使用systemctl重啟atd服務后,問題得以解決,此經驗可為類似情況提供參考2024-09-09ubuntu+php環(huán)境下的Memcached 安裝方法
Memcached是一套分散式的高速緩存系統,當初是Danga Interactive為了LiveJournal所發(fā)展2011-11-11CentOS 6.6安裝配置LAMP服務器(Apache+PHP5+MySQL)
這篇文章主要介紹了CentOS 6.6服務器下安裝配置LAMP服務器的方法,考慮到apache處理php的性能可以選擇apache,如果靜態(tài)頁面可以安裝nginx2016-10-10