剖析使用Linux動(dòng)態(tài)庫(kù)應(yīng)注意的問題
你對(duì)操作系統(tǒng)了解么?現(xiàn)在很多人應(yīng)該了解微軟,其實(shí)現(xiàn)在Linux也越來(lái)越受到廣大程序員的喜歡。這里為你詳細(xì)介紹應(yīng)注意的使用Linux動(dòng)態(tài)庫(kù)應(yīng)注意的問題,為你在學(xué)習(xí)的使用Linux動(dòng)態(tài)庫(kù)應(yīng)注意的問題起一定的作用。
1、無(wú)論是動(dòng)態(tài)庫(kù)的顯式調(diào)用還是隱式調(diào)用,都需要用
ldconfig工具將動(dòng)態(tài)庫(kù)的路徑加到系統(tǒng)庫(kù)列表中,否則運(yùn)行時(shí)會(huì)出錯(cuò)。
2、可以用ldd命令檢查程序都使用到哪些共享庫(kù)
ldd命令行用法如下:
ldd [--version] [-v|--verbose] [-d|--data-relocs] [-r|--function-relocs] [--help] FILE...
各選項(xiàng)說(shuō)明如下:
(1) --version : 此選項(xiàng)用于打印出ldd的版本號(hào).
(2) -v 或 --verbose : 此選項(xiàng)指示ldd輸出關(guān)于所依賴的動(dòng)態(tài)鏈接庫(kù)的盡可能詳細(xì)的信息.
(3) -d 或 --data-relocs : 此選項(xiàng)執(zhí)行重定位,并且顯示不存在的函數(shù).
(4) -r 或 --function-relocs : 此選項(xiàng)執(zhí)行數(shù)據(jù)對(duì)象與函數(shù)的重定位,同時(shí)報(bào)告不存在的對(duì)象.
(5) --help : 此選項(xiàng)用于打印出ldd的幫助信息.
我們一般用-v選項(xiàng).
現(xiàn)在看幾個(gè)實(shí)例
⑴用靜態(tài)庫(kù)連接時(shí)的結(jié)果
- #ldd main
- libc.so.6 => /lib/tls/libc.so.6 (0xb74ad000)
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)
可見使用靜態(tài)庫(kù)時(shí),由于庫(kù)已經(jīng)被編譯成程序的一部分,因此ldd的輸出中就只有用到的
系統(tǒng)庫(kù)。
⑵用動(dòng)態(tài)庫(kù)隱式連接時(shí)的結(jié)果
- libtest.so => /root/exercise/libtest.so (0xb75e2000)
- libc.so.6 => /lib/tls/libc.so.6 (0xb74ab000)
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)
可見隱式使用動(dòng)態(tài)庫(kù)時(shí),所有用到的動(dòng)態(tài)庫(kù)(包括系統(tǒng)和用戶的)都會(huì)被顯示出來(lái)。
⑶動(dòng)態(tài)庫(kù)顯式連接時(shí)的結(jié)果
- ldd main
- libdl.so.2 => /lib/libdl.so.2 (0xb75e1000)
- libc.so.6 => /lib/tls/libc.so.6 (0xb74aa000)
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)
可見顯式使用動(dòng)態(tài)庫(kù)時(shí),程序中不再保存運(yùn)行時(shí)打開動(dòng)態(tài)庫(kù)的信息,只保留用到的系統(tǒng)庫(kù)的信息.
這個(gè)與使用靜態(tài)庫(kù)時(shí)的輸出是類似的.以上就是使用Linux動(dòng)態(tài)庫(kù)應(yīng)注意的問題。