- 論壇徽章:
- 17
|
回復(fù) 3# yecheng_110
rpath指定的是運(yùn)行時(shí)搜索路徑。庫的搜索路徑在其實(shí)分為兩個(gè)環(huán)境,一個(gè)鏈接生成程序時(shí)用到的路徑,一個(gè)是程序運(yùn)行時(shí)需要的路徑。ELF程序在生成時(shí)如果有用到動(dòng)態(tài)庫那么會(huì)在program header中生成.interp section,這個(gè)section就是用于指定interpreter的。interpreter的功能很多,而分析動(dòng)態(tài)庫符號(hào)及其依賴進(jìn)而加載和重定位相應(yīng)對(duì)象是其功能最重要一環(huán)。interpreter也叫作Runtime Linker。在鏈接生成程序時(shí)會(huì)鏈接器會(huì)根據(jù)“默認(rèn)搜索路徑”和指定的參數(shù)路徑來定位庫文件。而當(dāng)程序運(yùn)行時(shí)interpreter會(huì)根據(jù)“默認(rèn)搜索路徑”和rpath指定的路徑來定位庫文件。“默認(rèn)搜索路徑”在32位系統(tǒng)下是/lib,/usr/lib,在64位下是/lib64,/usr/lib64,可以通過修改/etc/ld.conf來指定額外的目錄到“默認(rèn)搜索路徑”中,可見“默認(rèn)搜索路徑”既在鏈接生成階段起作用也在運(yùn)行時(shí)起作用。LD_LIBRARY_PATH也可以指定搜索路徑,它在鏈接生成時(shí)和運(yùn)行時(shí)都起作用。可以通過在LD_LIBRARY_PATH指定路徑覆蓋“默認(rèn)搜索路徑”中的庫文件。因?yàn)槌绦蛟趩?dòng)時(shí)會(huì)先使用LD_LIBRARY_PATH。 |
|