修改程序加載動態庫搜尋路徑的三種可行方法_第1頁
修改程序加載動態庫搜尋路徑的三種可行方法_第2頁
修改程序加載動態庫搜尋路徑的三種可行方法_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1, 影響整個系統里所有程序的修改以ubuntu為例,在/etc/ld.so.conf.d 目錄下新增一個配置文件,名詞任意,比如為mylib.conf :lenky Ubuntu/etc/ld .so.conf.d $ sudo vi mylib.confsudo password for lenky:lenky Ubuntu/etc/ld .so.conf.d $ cat mylib.conf/home/lenky/lib/usr/lib/otherapp/lib指定了動態庫的加載路徑為/home/le nky/lib執行 ldconfig 進行更新 /etc/ld.so.cache :l

2、enky Ubuntu/etc/ld .so.conf.d $ sudo ldconfig也就是說/etc/ld.so.cache里保存了系統在執行應用程序加載動態庫的默認搜索路徑。動態庫的搜索 是有先后順序的,先找到誰就使用誰。2, 影響特定環境下所有程序的修改這利用的是LD_LIBRARY_PATH環境變量,在程序執行而加載動態庫時,首先搜索的是LD_LIBRARY_PATH指定的路徑,然后再是/etc/ld.so.cache 包含的系統默認搜索路徑。因此,如果主動指定某環境下的LD_LIBRARY_PATH環境變量,那么就能夠影響該環境下的所有應用程序執行時加載動態庫的搜索路徑。3, 影

3、響單個程序的修改如果我只想指定某一個程序myexe的動態庫搜索路徑,比如我要把某個程序分發給用戶,但又不知道用戶電腦上是否安裝了對應的依賴庫或依賴庫版本是否一致等,那么我干脆就提供這份庫,并讓我的 程序myexe在執行時鏈接到我所提供的這份庫,但又不能影響到用戶電腦上的其他程序。那么根據第2點的變通辦法有:a,創建一個腳本 wrapper,在這個腳本里 export LD_LIBRARY_PATH 或 setenv LD_LIBRARY_PATH環境變量,然后執行程序。b,創建一個程序 wrapper,在這個程序 export LD_LIBRARY_PATH環境變量,然后 exec執行程序。總

4、之,也就是為執行這個程序myexe而創建一個單獨的環境,并在這個環境里設置好LD_LIBRARY_PATH 。可以實現既定目的,但會比較麻煩,一種更簡單的方法是利用rpath 參數。有一段引用:-rpath=dirAdd a directory to the run time library search path. This is usedwhe n linking an ELF executable with shared objects. All -rpathargume nts are con cate nated and passed to the run time lin ker,

5、 whichuses them to locate shared objects at run time.-L searchdir-ibrary-path=searchdirAdd path searchdir to the list of paths that ld will search forarchive libraries and ld control scripts.簡而言之,-L指定程序編譯時的庫搜索路徑,而-rpath指定程序執行時的庫搜索路徑。指定單個程序執行時的庫搜索路徑,利用-rpath即可,比如:-Wl,-rpath,/path/to/foo -L/path/to/fo

6、o -lbaz注意其中的-WI,這表示它后面的參數是要傳遞給linker程序ld的。通過這幾個參數會讓程序時,在程序里寫上對應的elf動態段屬性RPATH :gcc 的-ld會在連接lenky Ubuntu/test $ cat t.c#include <stdio.h> int main() printf( "a");lenky Ubuntu/test $ gcc -o t -Wl,-rpath,/usr/lib ,-rpath, /home/lenky/lib,-rpath,/optt.clenky Ubuntu/test $ readelf -a t |

7、grep RPATHOxOOOOOOOf (RPATH)Libraryrpath: /usr/lib:/home/lenky/lib:/opt如果在編譯時,庫也在這幾個特定路徑,那么需要用-L來指定,以免編譯時提示出錯。程序myexe執行時,就可以搜索 RPATH內指定的路徑了。 ns/8482152/whats-the-differe nce-betwee n-rpath-a nd-l ns/6562403/i-do nt-u ndersta nd-wl-rpath-wl http:/e n. /wiki/Rpath轉載請保留地址:http:/le nky.i nf

8、o/2013/10/16/%e4%bf%ae%e6%94%b9%e7%a8%8b%e5%ba%8f%e5%8a%a0%e 8%bd%bd%e5%8a%a8%e6%80%81%e5%ba%93%e6%90%9c%e5%af%bb%e8%b7%af%e5%b e%84%e7%9a%84%e4%b8%89%e7%a7%8d%e5%8f%af%e8%a1%8c%e6%96%b9%e6%b3%95 / 或 /?p=2354備注:如無特殊說明,文章內容均出自Lenky個人的真實理解而并非存心妄自揣測來故意愚人耳目。由于個人水平有限,雖力求內容正確無誤,但仍然難免出錯,請勿見怪,如果可以則請留言告之,并 歡迎來 信 討論。另外值得說明的是,Lenky的部分文章以及部分內容參考借鑒了網絡上各位網友的熱心分享,特別是一些帶有完全參考的文章,其后附帶的鏈接內容也許更直接、更豐富,而我只是做了 一下歸納&轉述,在此也一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論