LD_LIBRARY_PATH詳解,從此不害怕安裝C語言源代碼軟件(歡迎海南大學的51粉絲)

下面是正文:

我在B站上面講解過軟件安裝全集,其實是怕新手還沒入門就放棄,所以只是簡單分類,然後強調大家儘量不要碰C源代碼軟件,能conda就conda,實在不行找二進制可執行程序:

其實,C源代碼的確是有點難度,但是掌握了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是新的路徑串), 實例如下;

cpp export LD_LIBRARY_PATH=/export/apps/anaconda2/2.4.1/lib/:$LD_LIBRARY_PATH ¨G1G /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 ¨G2G shell gcc -llzma --verbose ¨G3G 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 ¨G4G 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進行操作啦。

永久性添加

每次我使用該軟件都需要臨時修改庫文件,因爲上面的方法是臨時設置環境變量 LD_LIBRARY_PATH ,重啓或打開新的 Shell 之後,一切設置將不復存在。

爲了讓這種方法更完美一些,可以將該 LD_LIBRARY_PATHexport 語句寫到系統文件中,例如 /etc/profile/etc/export~/.bashrc 或者 ~/.bash_profile 等等,取決於你正在使用的操作系統咯。

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