国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Windows與Linux動態(tài)鏈接庫技術(shù)研究

2009-06-29 02:50:18鄒本娜
新媒體研究 2009年19期
關(guān)鍵詞:調(diào)用應(yīng)用程序內(nèi)存

鄒本娜

[摘要]動態(tài)鏈接庫技術(shù)是實(shí)現(xiàn)和設(shè)計(jì)程序常用的技術(shù)。分析和比較Windows和Linax兩種操作系統(tǒng)動態(tài)技術(shù),為對動態(tài)鏈接庫技術(shù)的學(xué)習(xí)提供有益的借鑒。

[關(guān)鍵詞]動態(tài)鏈接庫共享對象技術(shù)程序移植

中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1 671—7597(2009)1010092—01

一、引言

動態(tài)鏈(Dynamic Link Library abbr,DLL)技術(shù)是程序設(shè)計(jì)中經(jīng)常采用的技術(shù),其目的是縮減程序,節(jié)省空間,提高效率。采用動態(tài)庫技術(shù)具有很高的靈活性,對于升級軟件版本更加容易,可以帶來如運(yùn)行時占用較少的硬件資源,有助于模塊式化體系結(jié)構(gòu)開發(fā),修改升級軟件方便,隱藏實(shí)現(xiàn)細(xì)節(jié)等方便。

在Windows和Linux操作系統(tǒng)中,都可以采用這種方式進(jìn)行軟件設(shè)計(jì),但它們的調(diào)用方式以及編程方式不盡相同。本文將在介紹分析Windows系統(tǒng)及Linux系統(tǒng)下的動態(tài)鏈接技術(shù)的基礎(chǔ)上對兩種操作系統(tǒng)的處理方式進(jìn)行了簡要的比較。

二、Windows動態(tài)庫技術(shù)

Windows本身就有三個基本的動態(tài)鏈接庫,是windows的主要組成部分,它們分別是KERNEL(負(fù)責(zé)內(nèi)存管理、任務(wù)調(diào)度),USER(管理用戶界面),GDI(圖形設(shè)備接口)。另外,Windows系統(tǒng)中以FUN、DRV或DLL為擴(kuò)展名的文件都是動態(tài)鏈按庫的例子。

Windows的動態(tài)鏈接機(jī)制是動態(tài)鏈接庫的上述優(yōu)勢得以實(shí)現(xiàn)的基礎(chǔ)。一旦windows應(yīng)用程序調(diào)用了DLL中的函數(shù),那么在生成相應(yīng)的Windows可執(zhí)行文件時,所調(diào)用的函數(shù)的代碼并沒有被鏈接程序拷貝到應(yīng)用程序的可執(zhí)行文件中去,而是僅僅在其中加入了所調(diào)用函數(shù)的描述信息。僅當(dāng)應(yīng)用程序被裝入內(nèi)存開始運(yùn)行時,在Windows的管理下,才在應(yīng)用程序和相應(yīng)的DLL之間建立連接關(guān)系。當(dāng)要執(zhí)行所調(diào)用的DLL中的函數(shù)時,根據(jù)鏈接時產(chǎn)生的重定位信息,Windows轉(zhuǎn)去執(zhí)行DLL中相應(yīng)的函數(shù)代碼。這樣就不難理解,DLL具有自己的代碼段和數(shù)據(jù)段。一個DLL在內(nèi)存中只有一個實(shí)例,多個應(yīng)用程序使用同一個DLL時,將共享內(nèi)存中的一個實(shí)例。另外,在Windows管理下,動態(tài)鏈接庫的實(shí)例擁有并維護(hù)自己的一個引用計(jì)數(shù),這個引用計(jì)數(shù)表明當(dāng)前和該庫進(jìn)行動態(tài)鏈接的任務(wù)的個數(shù)。當(dāng)需要裝入一個DLL,而內(nèi)存中已經(jīng)存在時,則僅使引用計(jì)數(shù)加1,而且保證使應(yīng)用程序中對同一個DLL函數(shù)的調(diào)用都是內(nèi)存中的相同的副本。當(dāng)一個應(yīng)用程序結(jié)束時,相應(yīng)的DLL引用計(jì)數(shù)減1。僅當(dāng)引用計(jì)數(shù)值為0時,Windows這才把相應(yīng)的DLL卸出內(nèi)存??梢奃LL能夠經(jīng)濟(jì)高效地使用內(nèi)存。

三、Unux共事對象技術(shù)

在Linux操作系統(tǒng)中,采用了很多共享對象技術(shù)(Shared Object),雖然它和windows里的動態(tài)庫相對應(yīng),但它并不稱為動態(tài)庫。相應(yīng)的共享對象文件以,so作為后級,為了方便,在本文中,對該概念不進(jìn)行專門區(qū)分。Linux系統(tǒng)的/lib以及標(biāo)準(zhǔn)圖形界面的/usr/XllR6/lib等目錄里面,就有許多以so結(jié)尾的共享對象。同樣,在Linux下也有靜態(tài)函數(shù)庫這種調(diào)用方式,相應(yīng)的后綴以,結(jié)束。Linux采用該共享對象技術(shù)以方便程序間共享,節(jié)省程序占有空間,增加程序的可擴(kuò)展性和靈活性。Linux還可以通過LDPRELOAD變量讓開發(fā)人員可以使用自己的程序庫中的模塊來替換系統(tǒng)模塊。

同Windows系統(tǒng)一樣,在Linux中創(chuàng)建和使用動態(tài)庫是比較容易的事情,在編譯函數(shù)庫源程序時加上shared選取即可,這樣所生成的執(zhí)行程序就是動態(tài)鏈接庫。通常這樣的程序以so為后綴,在Linux動態(tài)庫程序設(shè)計(jì)過程中,通常流程是編寫用戶的接口文件,通常是,h文件,編寫實(shí)際的函數(shù)文件,以,c或,opp為后綴,再編寫makefile文件。對于較小的動態(tài)庫程序則不必如此,但這樣設(shè)計(jì)會使程序更加合理。

編譯生成動態(tài)鏈接庫后,進(jìn)而可以在程序中進(jìn)行調(diào)用。在Linux中,可以采用多種調(diào)用方式同Windows的系統(tǒng)目錄(..\system32等)一樣可以將動態(tài)庫文件拷貝到/lib目錄或者在/1ib目錄里面建立符號連接,以便所有用戶使用。

四、兩種系統(tǒng)動態(tài)庫比較分析

Windows和Linux采用動態(tài)鏈接庫技術(shù)的目的是基本一致的,但由于操作系統(tǒng)不同,他們之間也還是有許多不同之處,主要體現(xiàn)在以下幾個方面:

1,動態(tài)庫程序編寫。在windows系統(tǒng)下的執(zhí)行文件格式是PE格式,動態(tài)庫需要一個DllMain函數(shù)作為初始化的入口。通常在導(dǎo)出函數(shù)的聲明時需要有declspec(dllexport)關(guān)鍵字Linux下的gco編譯的執(zhí)行文件默認(rèn)是ELF格式,不需要初始化入口,亦不需要在函數(shù)中做特別的聲明,編寫比較方便。

2,動態(tài)庫編譯。在Windows系統(tǒng)下面,有方便的調(diào)試編譯環(huán)境,通常不用自己去編寫makefile文件,但在linux target=Linux下面需要自己動手編寫makefile文件,因此,必須掌握一定的makefile編寫技巧,通常Linux編譯規(guī)則相對嚴(yán)格些。

3,動態(tài)庫調(diào)用方面。Windows和Linux對其下編制的動態(tài)庫都可以采用顯式調(diào)用或隱式調(diào)用,但具體的調(diào)用方式不盡相同。

4,動態(tài)庫輸出函數(shù)查看。在windows中,有許多工具和軟件可用來查看DLL中輸出的函數(shù)例如命令行方式dumpbin以及vc++工具中的DEPENDS程序。在Linux系統(tǒng)中通常采用n來查看輸出函數(shù),也可以使用ldd查看程序隱式鏈接的共享對象文件。

5,對操作系統(tǒng)的依賴。這兩種動態(tài)庫運(yùn)行依賴于各自的操作系統(tǒng),不能跨平臺使用。因此,對于實(shí)現(xiàn)相同功能的動態(tài)庫,必須為兩種不同的操作系統(tǒng)提供不同的動態(tài)庫版本。

五、總結(jié)

本文系統(tǒng)分析了Windows和Linux動態(tài)庫實(shí)現(xiàn),從程序編寫、編譯、調(diào)用以及對操作系統(tǒng)依賴等方面綜合分析和比較了這兩種調(diào)用方式的不同之處,為初學(xué)者對這兩種動態(tài)鏈接技術(shù)的學(xué)習(xí)提供了有益的參考。

猜你喜歡
調(diào)用應(yīng)用程序內(nèi)存
外部高速緩存與非易失內(nèi)存結(jié)合的混合內(nèi)存體系結(jié)構(gòu)特性評測
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
刪除Win10中自帶的應(yīng)用程序
電腦報(2019年12期)2019-09-10 05:08:20
“春夏秋冬”的內(nèi)存
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
基于內(nèi)存的地理信息訪問技術(shù)
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
關(guān)閉應(yīng)用程序更新提醒
電腦迷(2012年15期)2012-04-29 17:09:47
三星電子將開設(shè)應(yīng)用程序下載商店
泾阳县| 新蔡县| 平江县| 嘉善县| 泰兴市| 平潭县| 乌拉特中旗| 永善县| 元朗区| 桃园市| 江陵县| 台湾省| 天长市| 油尖旺区| 扎鲁特旗| 菏泽市| 荔浦县| 武隆县| 辉县市| 崇义县| 德保县| 正安县| 体育| 江川县| 大英县| 宁国市| 探索| 龙陵县| 济南市| 同德县| 昌平区| 渭源县| 中山市| 满城县| 昌邑市| 巴南区| 罗源县| 周口市| 洞口县| 长沙市| 章丘市|