假設(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文章
112瀏覽量
26250 -
搜索
+關(guān)注
關(guān)注
0文章
70瀏覽量
16999 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
972瀏覽量
30472
發(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ù)案例
虛擬機(jī):GCC共享庫(kù)在連接時(shí)的搜索位置和優(yōu)選次序
評(píng)論