PATH linux環境變量 LD_LIBRARY_PATH詳解

LD_LIBRARY_PATH詳解

LD_LIBRARY_PATH是Linux環境變量名,該環境變量主要用於指定查找共享庫(動態鏈接庫)時除了默認路徑之外的其他路徑。

非常多的軟件沒有root權限安裝會比較困難,主要就是因爲各種系統庫文件,也就是LD_LIBRARY_PATH這個環境變量裏面的文件。比如前面我提到的lancet軟件需要的庫文件如下:

-llzma -lbz2 -lz -ldl -lpthread -lcurl -lcrypto -lbamtools

可以使用 ls /usr/lib |grep lib 查看自己是否有需要的庫文件,當然還需查看其它庫文件目錄:echo $LD_LIBRARY_PATH 裏面一般可以看到七八個已經定義好的庫文件搜索路徑。

當執行函數動態鏈接.so時,如果此文件不在缺省目錄下 /lib和/usr/lib,那麼就需要指定環境變量LD_LIBRARY_PATH 假如現在需要在已有的環境變量上添加新的路徑名,則採用如下方式: LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH (newdirs是新的路徑串), 實例如下;

export LD_LIBRARY_PATH=/export/apps/anaconda2/2.4.1/lib/:$LD_LIBRARY_PATH

一般報錯

/usr/bin/ld: cannot find -llzma
collect2: error: ld returned 1 exit status
make[1]: *** [lancet] Error 1
make[1]: Leaving directory `/home/jianmingzeng/biosoft/lancet/lancet/src'
cp: cannot stat `lancet': No such file or directory

其實就是gcc編輯器找不到我們系統的liblzma這個庫文件,就是我們的LD_LIBRARY_PATH定義的所有路徑裏面都沒有這個liblzma這個庫文件。

驗證gcc編輯器能否找到指定庫文件的方法是:

gcc -llzma --verbose

因爲找不到,所以需要設置。

需要找到系統的庫文件地址

事實上,我們的機器肯定是有這個庫文件的,只不過是不在LD_LIBRARY_PATH定義的所有路徑裏面,簡單查找如下:

locate liblzma 
/export/apps/anaconda2/2.4.1/lib/liblzma.a
/export/apps/anaconda2/2.4.1/lib/liblzma.la
/export/apps/anaconda2/2.4.1/lib/liblzma.so
/export/apps/anaconda2/2.4.1/lib/liblzma.so.5
/export/apps/anaconda2/2.4.1/lib/liblzma.so.5.0.5

爲了解決我,我們需要添加:

export LD_LIBRARY_PATH=/export/apps/anaconda2/4.0.0/lib/:$LD_LIBRARY_PATH
export LIBRARY_PATH=/export/apps/anaconda2/4.0.0/lib/:$LIBRARY_PATH

爲什麼修改LD_LIBRARY_PATH呢

因爲運行時動態庫的搜索路徑的先後順序是:
1.編譯目標代碼時指定的動態庫搜索路徑;
2.環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
3.配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;
4.默認的動態庫搜索路徑/lib和/usr/lib;

這個順序是compile gcc時寫在程序內的,通常軟件源代碼自帶的動態庫不會太多,而我們的/lib和/usr/lib只有root權限纔可以修改,而且配置文件/etc/ld.so.conf也是root的事情,我們只好對LD_LIBRARY_PATH進行操作啦。

永久性添加

PATH:  可執行程序的查找路徑

查看當前環境變量:

echo $PATH

 設置:

方法一: export PATH=PATH:/XXX 但是登出後就失效

方法二:修改~/.bashrc或~/.bash_profile或系統級別的/etc/profile

                  1. 在其中添加例如export PATH=/opt/ActivePython-2.7/bin:$PATH

                  2. source .bashrc  (Source命令也稱爲“點命令”,也就是一個點符號(.)。source命令通常用於重新執行剛修改的初始化文件,使之立即生效,而不必註銷並重新登錄)

 

 

LD_LIBRARY_PATH: 動態庫的查找路徑

設置:

方法一: export  LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是登出後就失效

方法二:  修改~/.bashrc或~/.bash_profile或系統級別的/etc/profile

                  1. 在其中添加例如export PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH

                  2. source .bashrc  (Source命令也稱爲“點命令”,也就是一個點符號(.)。source命令通常用於重新執行剛修改的初始化文件,使之立即生效,而不必註銷並重新登錄)

方法三:這個沒有修改LD_LIBRARY_PATH但是效果是一樣的實現動態庫的查找,

                1. /etc/ld.so.conf下面加一行/usr/local/mysql/lib

                2. 保存過後ldconfig一下(ldconfig 命令的用途,主要是在默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態鏈接庫(格式如前介紹,lib*.so*),進而創建出動態裝入程序(ld.so)所需的連接和緩存文件.緩存文件默認爲/etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表.)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章