亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,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)行時(shí)占用較少的硬件資源,有助于模塊式化體系結(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本身就有三個(gè)基本的動態(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í)行文件時(shí),所調(diào)用的函數(shù)的代碼并沒有被鏈接程序拷貝到應(yīng)用程序的可執(zhí)行文件中去,而是僅僅在其中加入了所調(diào)用函數(shù)的描述信息。僅當(dāng)應(yīng)用程序被裝入內(nèi)存開始運(yùn)行時(shí),在Windows的管理下,才在應(yīng)用程序和相應(yīng)的DLL之間建立連接關(guān)系。當(dāng)要執(zhí)行所調(diào)用的DLL中的函數(shù)時(shí),根據(jù)鏈接時(shí)產(chǎn)生的重定位信息,Windows轉(zhuǎn)去執(zhí)行DLL中相應(yīng)的函數(shù)代碼。這樣就不難理解,DLL具有自己的代碼段和數(shù)據(jù)段。一個(gè)DLL在內(nèi)存中只有一個(gè)實(shí)例,多個(gè)應(yīng)用程序使用同一個(gè)DLL時(shí),將共享內(nèi)存中的一個(gè)實(shí)例。另外,在Windows管理下,動態(tài)鏈接庫的實(shí)例擁有并維護(hù)自己的一個(gè)引用計(jì)數(shù),這個(gè)引用計(jì)數(shù)表明當(dāng)前和該庫進(jìn)行動態(tài)鏈接的任務(wù)的個(gè)數(shù)。當(dāng)需要裝入一個(gè)DLL,而內(nèi)存中已經(jīng)存在時(shí),則僅使引用計(jì)數(shù)加1,而且保證使應(yīng)用程序中對同一個(gè)DLL函數(shù)的調(diào)用都是內(nèi)存中的相同的副本。當(dāng)一個(gè)應(yīng)用程序結(jié)束時(shí),相應(yīng)的DLL引用計(jì)數(shù)減1。僅當(dāng)引用計(jì)數(shù)值為0時(shí),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ù)庫源程序時(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)在以下幾個(gè)方面:

        1,動態(tài)庫程序編寫。在windows系統(tǒng)下的執(zhí)行文件格式是PE格式,動態(tài)庫需要一個(gè)DllMain函數(shù)作為初始化的入口。通常在導(dǎo)出函數(shù)的聲明時(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)存
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        刪除Win10中自帶的應(yīng)用程序
        “春夏秋冬”的內(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)用程序下載商店
        微軟軟件商店開始接受應(yīng)用程序
        午夜精品久久久久久| 日本午夜一区二区视频| 亚洲国产精品色一区二区| 无码国产精品一区二区vr老人| 日本无码人妻波多野结衣| 久久无码av三级| 亚洲一区二区久久青草| 韩国日本亚洲精品视频| 被驯服人妻中文字幕日本| 日韩一区二区av伦理| 人妻少妇满足中文字幕| 伊人大杳焦在线| 伊人激情av一区二区三区| 久久不见久久见免费视频7| 日韩AV无码一区二区三| 高潮社区51视频在线观看| 亚洲欧美v国产蜜芽tv| 91精品欧美综合在线观看| av无码特黄一级| 亚洲国产精品久久久婷婷| 久亚洲精品不子伦一区| 青青草原综合久久大伊人精品| а√天堂资源官网在线资源| 亚洲欧洲∨国产一区二区三区 | 成人免费ā片在线观看| 国产在线视欧美亚综合| 亚洲av色在线观看网站| 粗一硬一长一进一爽一a视频| 国产精品亚洲综合久久系列| 尤物国产一区二区三区在线观看| 国产不卡在线视频观看| 亚洲av成人无码久久精品老人| 国模无码一区二区三区不卡| 国产99久久亚洲综合精品| 国产va免费精品高清在线观看| 在线观看av国产自拍| av在线男人的免费天堂| 午夜亚洲精品视频在线 | 日韩成人无码v清免费| 久久久久亚洲AV片无码乐播 | 久久久久中文字幕无码少妇|