動(dòng)態(tài)庫(kù)環(huán)境變量設(shè)置
在 Linux 系統(tǒng)中,當(dāng)程序依賴動(dòng)態(tài)庫(kù)(.so文件)時(shí),操作系統(tǒng)需要知道動(dòng)態(tài)庫(kù)的位置才能正確加載。若動(dòng)態(tài)庫(kù)不在在系統(tǒng)默認(rèn)搜索路徑中,需通過(guò)環(huán)境變量或配置文件指定路徑。
一、核心環(huán)境變量:LD_LIBRARY_PATH
LD_LIBRARY_PATH是最常用的環(huán)境變量,用于臨時(shí)程序運(yùn)行時(shí)臨時(shí)指定動(dòng)態(tài)庫(kù)的搜索路徑。
1.1 臨時(shí)設(shè)置(當(dāng)前終端有效)
在終端中直接設(shè)置,僅對(duì)當(dāng)前終端會(huì)話有效:
# 將動(dòng)態(tài)庫(kù)所在目錄添加到 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/path/to/your/lib:$LD_LIBRARY_PATH
# 運(yùn)行程序(此時(shí)會(huì)優(yōu)先從 /path/to/your/lib 加載動(dòng)態(tài)庫(kù))
./your_program
- 路徑問(wèn)題:動(dòng)態(tài)庫(kù)的查找機(jī)制
程序運(yùn)行時(shí)加載動(dòng)態(tài)庫(kù)的默認(rèn)查找路徑優(yōu)先級(jí)為:
① 編譯時(shí)通過(guò) -rpath 指定的路徑(硬編碼到程序中)
② 環(huán)境變量 LD_LIBRARY_PATH 中指定的路徑
③ 系統(tǒng)默認(rèn)路徑(/lib、/usr/lib、/usr/local/lib 等,由 /etc/ld.so.conf 配置)
如果動(dòng)態(tài)庫(kù)不在這些路徑中,程序會(huì)報(bào)錯(cuò):
error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory
1.2 永久設(shè)置(針對(duì)所有用戶)
若需長(zhǎng)期生效,可將上述命令添加到 shell 配置文件(如 ~/.bashrc 或 ~/.bash_profile),然后執(zhí)行:
source ~/.bashrc # 使配置生效
二、環(huán)境變量針對(duì)當(dāng)前用戶
“環(huán)境變量針對(duì)當(dāng)前用戶” 的核心意思是:每個(gè) Linux 用戶都有獨(dú)立的環(huán)境變量配置,不同用戶登錄后,看到的、使用的環(huán)境變量(如 PATH、LD_LIBRARY_PATH)可能完全不同。
核心原因:
不同用戶的環(huán)境變量,從 “不同的配置文件” 中加載,這些文件是用戶專屬的,不會(huì)交叉共用。
三、如何驗(yàn)證 “用戶環(huán)境變量的差異”?
用一個(gè)簡(jiǎn)單命令就能看到不同用戶的環(huán)境變量差異,步驟如下:
- 登錄用戶 A(如 dev),執(zhí)行命令查看 LD_LIBRARY_PATH:
echo $LD_LIBRARY_PATH # 輸出:/home/dev/lib:/usr/lib (假設(shè)dev配置過(guò))
- 切換到用戶 B(如 root),再執(zhí)行同樣命令:
su - root # 切換到root用戶
echo $LD_LIBRARY_PATH # 輸出:/usr/lib (root沒(méi)配置過(guò),只有系統(tǒng)默認(rèn)路徑)
通過(guò)對(duì)比輸出,能清晰看到:兩個(gè)用戶的 LD_LIBRARY_PATH 完全不同,這就是 “環(huán)境變量針對(duì)當(dāng)前用戶” 的直觀體現(xiàn)。

浙公網(wǎng)安備 33010602011771號(hào)