下面是正文:
我在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_PATH
的 export
語句寫到系統文件中,例如 /etc/profile
、/etc/export
、~/.bashrc
或者 ~/.bash_profile
等等,取決於你正在使用的操作系統咯。