假設(shè)有兩個(gè)相同的共享庫(kù),一個(gè)在標(biāo)準(zhǔn)的共享庫(kù)搜索目錄(/lib/i386-linux-gnu), 一個(gè)在非標(biāo)準(zhǔn)目錄(/home/charles/tmp):
在/home/charles/tmp下有個(gè)測(cè)試程序main.c,調(diào)用共享庫(kù)里的函數(shù)。
用如下的命令編譯:
用ldd看一下link的共享庫(kù):
可以看出,雖然我們指定了要使用 /home/charles/tmp下的庫(kù),但實(shí)際上用的還是標(biāo)準(zhǔn)搜索路徑下的庫(kù)。
換句話說(shuō),GNU ld 優(yōu)選搜索標(biāo)準(zhǔn)路徑下的文件,然后才是 -L指定的
現(xiàn)在執(zhí)行
export LD_LIBRARY_PATH=/home/charles/tmp
可見(jiàn),LD_LIBRARY_PATH指定的路徑優(yōu)選于系統(tǒng)標(biāo)準(zhǔn)目錄。
最后嘗試一下如下的方法:
gcc main.c -wl,-rpath,/home/charles/tmp -g -o main -lshared
或者:
gcc main.c -Wl,-rpath /home/charles/tmp -g -o main -lshared
最后,總結(jié)一下,共享庫(kù)的搜索順序(按照優(yōu)先次序):
1) LD_LIBRARY_PATH指定的目錄
2) rpath指定的路徑。
rpath指定的路徑同時(shí)被寫(xiě)進(jìn)了二進(jìn)制文件里面。
p$ readelf -d main | grep rpath
0x0000000f (RPATH) Library rpath: [/home/charles/tmp]
3)系統(tǒng)標(biāo)準(zhǔn)路徑
這包括/lib, /usr/lib, /usr/local/lib以及在/etc/ld.conf 里面指定的路徑。
-
GCC
+關(guān)注
關(guān)注
0文章
109瀏覽量
25252 -
搜索
+關(guān)注
關(guān)注
0文章
70瀏覽量
16793 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
963瀏覽量
29108
發(fā)布評(píng)論請(qǐng)先 登錄
什么是虛擬機(jī)?虛擬機(jī)真的那么好用嗎?

創(chuàng)建ubuntu虛擬機(jī)
開(kāi)發(fā)板如何通過(guò)虛擬機(jī)文件共享功能,運(yùn)行虛擬機(jī)上linux下的程序
VMware虛擬機(jī)與主機(jī)共享文件的方法
VMware虛擬機(jī)與主機(jī)共享文件的方法步驟
如何創(chuàng)建虛擬機(jī)?
在VM2008R2中使用模板快速創(chuàng)建虛擬機(jī)
windows 與虛擬機(jī)共享設(shè)置手冊(cè).pdf
如何使用windows10遠(yuǎn)程連接虛擬機(jī)桌面
虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)
虛擬化數(shù)據(jù)恢復(fù)—虛擬機(jī)誤還原快照的數(shù)據(jù)恢復(fù)案例
服務(wù)器數(shù)據(jù)恢復(fù)—EMC Isilon存儲(chǔ)中虛擬機(jī)數(shù)據(jù)恢復(fù)案例

虛擬機(jī)數(shù)據(jù)恢復(fù)—KVM虛擬機(jī)被誤刪除的數(shù)據(jù)恢復(fù)案例

評(píng)論