日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

LINUX動(dòng)態(tài)鏈接庫高級(jí)應(yīng)用( 四 )


# cc -L/usr/zzz/lib -lmy -o ady ady.c
#

(3)直接引用所需的動(dòng)態(tài)鏈接庫.即:

# cc -o ady ady.c libmy.so
#



# cc -o ady ady.c /lib/libmy.so
#

等等.其中,動(dòng)態(tài)鏈接庫的庫名可以采用相對路徑形式(文件名不以/開頭),也可采用絕對路徑形式(文件名以/開頭).

五、動(dòng)態(tài)鏈接程序的運(yùn)行與檢查

5.1 運(yùn)行

編譯連接好含動(dòng)態(tài)函數(shù)的程序后,就可以運(yùn)行它了.動(dòng)態(tài)鏈接程序因?yàn)楣蚕砹讼到y(tǒng)中的動(dòng)態(tài)鏈接庫,所以其空間占用很小.但這并不意味功能的減少,它的執(zhí)行與靜態(tài)連接的程序執(zhí)行,效果完全相同.在命令提示符下鍵入程序名及相關(guān)參數(shù)后回車即可,如下例:

$ ady
動(dòng)態(tài)鏈接庫高級(jí)應(yīng)用示范
當(dāng)前日期: 2002-03-11
當(dāng)前時(shí)間: 19:39:06
$

5.2 檢查

檢查什么?檢查動(dòng)態(tài)鏈接程序究竟需要哪些共享庫,系統(tǒng)中是否已有這些庫,沒有的話,用戶好想辦法把這些庫裝上.

怎么檢查呢?這里,告訴你一個(gè)實(shí)用程序--ldd,這個(gè)程序就是專門用來檢查動(dòng)態(tài)鏈接程序依賴哪些共享庫的.

ldd命令行用法如下:

ldd [--version] [-v|--verbose] [-d|--data-relocs] [-r|--function-relocs] [--help] FILE...

各選項(xiàng)說明如下:

(1) --version : 此選項(xiàng)用于打印出ldd的版本號(hào).

(2) -v 或 --verbose : 此選項(xiàng)指示ldd輸出關(guān)于所依賴的動(dòng)態(tài)鏈接庫的盡可能詳細(xì)的信息.

(3) -d 或 --data-relocs : 此選項(xiàng)執(zhí)行重定位,并且顯示不存在的函數(shù).

(4) -r 或 --function-relocs : 此選項(xiàng)執(zhí)行數(shù)據(jù)對象與函數(shù)的重定位,同時(shí)報(bào)告不存在的對象.

(5) --help : 此選項(xiàng)用于打印出ldd的幫助信息.

注: 上述選項(xiàng)中,常用-v(或--verbose)選項(xiàng).

ldd的命令行參數(shù)為FILE...,即一個(gè)或多個(gè)文件名(動(dòng)態(tài)鏈接程序或動(dòng)態(tài)鏈接庫).

例1:

$ ldd ady
libmy.so => ./libmy.so (0x40026000)
libc.so.6 => /lib/libc.so.6 (0x40028000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$

注: 每行=>前面的,為動(dòng)態(tài)鏈接程序所需的動(dòng)態(tài)鏈接庫的名字,而=>后面的,則是運(yùn)行時(shí)系統(tǒng)實(shí)際調(diào)用的動(dòng)態(tài)鏈接庫的名字,所需的動(dòng)態(tài)鏈接庫在系統(tǒng)中不存在時(shí),=>后面將顯示"not found",括號(hào)所括的數(shù)字為虛擬的執(zhí)行地址.本例列出ady所需的三個(gè)動(dòng)態(tài)鏈接庫,其中l(wèi)ibmy.so為自己新建的動(dòng)態(tài)鏈接庫,而 libc.so.6與/lib/ld-linux.so.2均為系統(tǒng)的動(dòng)態(tài)鏈接庫,前一個(gè)為基本C庫,后一個(gè)動(dòng)態(tài)裝入庫(用于動(dòng)態(tài)鏈接庫的裝入及運(yùn)行).

例2:

$ ldd -v ady
libmy.so => ./libmy.so (0x40026000)
libc.so.6 => /lib/libc.so.6 (0x40028000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Version information:
./ady:
libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
./libmy.so:
libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
/lib/libc.so.6:
ld-linux.so.2 (GLIBC_2.1.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.2) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2
$

注:本例用-v選項(xiàng)以顯示盡可能多的信息,所以例中除列出ady所需要的動(dòng)態(tài)鏈接庫外,還列出了程序所需動(dòng)態(tài)鏈接庫版本方面的信息.

小結(jié): 在LINUX動(dòng)態(tài)鏈接庫的高級(jí)應(yīng)用中,關(guān)鍵有兩點(diǎn),一是如何讓動(dòng)態(tài)鏈接庫為LINUX系統(tǒng)所共享,二是編譯連接程序時(shí)如何做.讓動(dòng)態(tài)鏈接庫為系統(tǒng)所共享, 主要是用ldconfig管理命令,維護(hù)好系統(tǒng)共享庫的緩存文件/etc/ld.so.cache.編譯連接時(shí)如何做?注意連接上所用的動(dòng)態(tài)鏈接庫就可以了.LINUX動(dòng)態(tài)鏈接庫的高級(jí)應(yīng)用,用一用就明白:其實(shí),就是這么簡單!

推薦閱讀