亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 深入分析windows和linux動(dòng)態(tài)庫(kù)應(yīng)用異同 .txt

?? 許多大公司的試題 面試的和筆試的,其中包括C和C++ JAVA
?? TXT
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):

 
深入分析Windows和Linux動(dòng)態(tài)庫(kù)應(yīng)用異同 

摘要:動(dòng)態(tài)鏈接庫(kù)技術(shù)實(shí)現(xiàn)和設(shè)計(jì)程序常用的技術(shù),在Windows和Linux系統(tǒng)中都有動(dòng)態(tài)庫(kù)的概念,采用動(dòng)態(tài)庫(kù)可以有效的減少程序大小,節(jié)省空間,提高效率,增加程序的可擴(kuò)展性,便于模塊化管理。

但不同操作系統(tǒng)的動(dòng)態(tài)庫(kù)由于格式 不同,在需要不同操作系統(tǒng)調(diào)用時(shí)需要進(jìn)行動(dòng)態(tài)庫(kù)程序移植。本文分析和比較了兩種操作系統(tǒng)動(dòng)態(tài)庫(kù)技術(shù),并給出了將Visual C++編制的動(dòng)態(tài)庫(kù)移植到Linux上的方法和經(jīng)驗(yàn)。

1、引言

動(dòng)態(tài)庫(kù)(Dynamic Link Library abbr,DLL)技術(shù)是程序設(shè)計(jì)中經(jīng)常采用的技術(shù)。其目的減少程序的大小,節(jié)省空間,提高效率,具有很高的靈活性。

采用動(dòng)態(tài)庫(kù)技術(shù)對(duì)于升級(jí)軟件版本更加容易。與靜態(tài)庫(kù)(Static Link Library)不同,動(dòng)態(tài)庫(kù)里面的函數(shù)不是執(zhí)行程序本身的一部分,而是根據(jù)執(zhí)行需要按需載入,其執(zhí)行代碼可以同時(shí)在多個(gè)程序中共享。

在Windows和Linux操作系統(tǒng)中,都可采用這種方式進(jìn)行軟件設(shè)計(jì),但他們的調(diào)用方式以及程序編制方式不盡相同。本文首先分析了在這兩種操作系統(tǒng)中通常采用的動(dòng)態(tài)庫(kù)調(diào)用方法以及程序編制方式,然后分析比較了這兩種方式的不同之處,最后根據(jù)實(shí)際移植程序經(jīng)驗(yàn),介紹了將VC++編制的Windows動(dòng)態(tài)庫(kù)移植到Linux下的方法。

2、動(dòng)態(tài)庫(kù)技術(shù)

2.1 Windows動(dòng)態(tài)庫(kù)技術(shù)

動(dòng)態(tài)鏈接庫(kù)是實(shí)現(xiàn)Windows應(yīng)用程序共享資源、節(jié)省內(nèi)存空間、提高使用效率的一個(gè)重要技術(shù)手段。常見(jiàn)的動(dòng)態(tài)庫(kù)包含外部函數(shù)和資源,也有一些動(dòng)態(tài)庫(kù)只包含資源,如Windows字體資源文件,稱(chēng)之為資源動(dòng)態(tài)鏈接庫(kù)。通常動(dòng)態(tài)庫(kù)以.dll,.drv、.fon等作為后綴。

相應(yīng)的windows靜態(tài)庫(kù)通常以.lib結(jié)尾,Windows自己就將一些主要的系統(tǒng)功能以動(dòng)態(tài)庫(kù)模塊的形式實(shí)現(xiàn)。

Windows動(dòng)態(tài)庫(kù)在運(yùn)行時(shí)被系統(tǒng)加載到進(jìn)程的虛擬空間中,使用從調(diào)用進(jìn)程的虛擬地址空間分配的內(nèi)存,成為調(diào)用進(jìn)程的一部分。DLL也只能被該進(jìn)程的線程所訪問(wèn)。DLL的句柄可以被調(diào)用進(jìn)程使用;調(diào)用進(jìn)程的句柄可以被DLL使用。

DLL模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL可以有自己的數(shù)據(jù)段,但沒(méi)有自己的堆棧,使用與調(diào)用它的應(yīng)用程序相同的堆棧模式;一個(gè)DLL在內(nèi)存中只有一個(gè)實(shí)例;DLL實(shí)現(xiàn)了代碼封裝性;DLL的編制與具體的編程語(yǔ)言及編譯器無(wú)關(guān),可以通過(guò)DLL來(lái)實(shí)現(xiàn)混合語(yǔ)言編程。DLL函數(shù)中的代碼所創(chuàng)建的任何對(duì)象(包括變量)都?xì)w調(diào)用它的線程或進(jìn)程所有。

根據(jù)調(diào)用方式的不同,對(duì)動(dòng)態(tài)庫(kù)的調(diào)用可分為靜態(tài)調(diào)用方式和動(dòng)態(tài)調(diào)用方式。

(1)靜態(tài)調(diào)用,也稱(chēng)為隱式調(diào)用,由編譯系統(tǒng)完成對(duì)DLL的加載和應(yīng)用程序結(jié)束時(shí)DLL卸載的編碼(Windows系統(tǒng)負(fù)責(zé)對(duì)DLL調(diào)用次數(shù)的計(jì)數(shù)),調(diào)用方式簡(jiǎn)單,能夠滿足通常的要求。通常采用的調(diào)用方式是把產(chǎn)生動(dòng)態(tài)連接庫(kù)時(shí)產(chǎn)生的.LIB文件加入到應(yīng)用程序的工程中,想使用DLL中的函數(shù)時(shí),只須在源文件中聲明一下。

LIB文件包含了每一個(gè)DLL導(dǎo)出函數(shù)的符號(hào)名和可選擇的標(biāo)識(shí)號(hào)以及DLL文件名,不含有實(shí)際的代碼。Lib文件包含的信息進(jìn)入到生成的應(yīng)用程序中,被調(diào)用的DLL文件會(huì)在應(yīng)用程序加載時(shí)同時(shí)加載在到內(nèi)存中。

(2)動(dòng)態(tài)調(diào)用,即顯式調(diào)用方式,是由編程者用API函數(shù)加載和卸載DLL來(lái)達(dá)到調(diào)用DLL的目的,比較復(fù)雜,但能更加有效地使用內(nèi)存,是編制大型應(yīng)用程序時(shí)的重要方式。在Windows系統(tǒng)中,與動(dòng)態(tài)庫(kù)調(diào)用有關(guān)的函數(shù)包括:

①LoadLibrary(或MFC 的AfxLoadLibrary),裝載動(dòng)態(tài)庫(kù)。

②GetProcAddress,獲取要引入的函數(shù),將符號(hào)名或標(biāo)識(shí)號(hào)轉(zhuǎn)換為DLL內(nèi)部地址。

③FreeLibrary(或MFC的AfxFreeLibrary),釋放動(dòng)態(tài)鏈接庫(kù)。

在windows中創(chuàng)建動(dòng)態(tài)庫(kù)也非常方便和簡(jiǎn)單。在Visual C++中,可以創(chuàng)建不用MFC而直接用C語(yǔ)言寫(xiě)的DLL程序,也可以創(chuàng)建基于MFC類(lèi)庫(kù)的DLL程序。每一個(gè)DLL必須有一個(gè)入口點(diǎn),在VC++中,DllMain是一個(gè)缺省的入口函數(shù)。DllMain負(fù)責(zé)初始化(Initialization)和結(jié)束(Termination)工作。

動(dòng)態(tài)庫(kù)輸出函數(shù)也有兩種約定,分別是基于調(diào)用約定和名字修飾約定。DLL程序定義的函數(shù)分為內(nèi)部函數(shù)和導(dǎo)出函數(shù),動(dòng)態(tài)庫(kù)導(dǎo)出的函數(shù)供其它程序模塊調(diào)用。通常可以有下面幾種方法導(dǎo)出函數(shù):

①采用模塊定義文件的EXPORT部分指定要輸入的函數(shù)或者變量。

②使用MFC提供的修飾符號(hào)_declspec(dllexport)。

③以命令行方式,采用/EXPORT命令行輸出有關(guān)函數(shù)。

在windows動(dòng)態(tài)庫(kù)中,有時(shí)需要編寫(xiě)模塊定義文件(.DEF),它是用于描述DLL屬性的模塊語(yǔ)句組成的文本文件。

2.2 Linux共享對(duì)象技術(shù)

在Linux操作系統(tǒng)中,采用了很多共享對(duì)象技術(shù)(Shared Object),雖然它和Windows里的動(dòng)態(tài)庫(kù)相對(duì)應(yīng),但它并不稱(chēng)為動(dòng)態(tài)庫(kù)。相應(yīng)的共享對(duì)象文件以.so作為后綴,為了方便,在本文中,對(duì)該概念不進(jìn)行專(zhuān)門(mén)區(qū)分。Linux系統(tǒng)的/lib以及標(biāo)準(zhǔn)圖形界面的/usr/X11R6/lib等目錄里面,就有許多以so結(jié)尾的共享對(duì)象。

同樣,在Linux下,也有靜態(tài)函數(shù)庫(kù)這種調(diào)用方式,相應(yīng)的后綴以.a結(jié)束。Linux采用該共享對(duì)象技術(shù)以方便程序間共享,節(jié)省程序占有空間,增加程序的可擴(kuò)展性和靈活性。Linux還可以通過(guò)LD-PRELOAD變量讓開(kāi)發(fā)人員可以使用自己的程序庫(kù)中的模塊來(lái)替換系統(tǒng)模塊。

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

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

下面介紹Linux調(diào)用動(dòng)態(tài)庫(kù)經(jīng)常使用的函數(shù),但在使用動(dòng)態(tài)庫(kù)時(shí),源程序必須包含dlfcn.h頭文件,該文件定義調(diào)用動(dòng)態(tài)鏈接庫(kù)的函數(shù)的原型。

(1)_打開(kāi)動(dòng)態(tài)鏈接庫(kù):dlopen,函數(shù)原型void *dlopen (const char *filename, int flag); dlopen用于打開(kāi)指定名字(filename)的動(dòng)態(tài)鏈接庫(kù),并返回操作句柄。

(2)取函數(shù)執(zhí)行地址:dlsym,函數(shù)原型為: void *dlsym(void *handle, char *symbol); dlsym根據(jù)動(dòng)態(tài)鏈接庫(kù)操作句柄(handle)與符號(hào)(symbol),返回符號(hào)對(duì)應(yīng)的函數(shù)的執(zhí)行代碼地址。

(3)關(guān)閉動(dòng)態(tài)鏈接庫(kù):dlclose,函數(shù)原型為: int dlclose (void *handle); dlclose用于關(guān)閉指定句柄的動(dòng)態(tài)鏈接庫(kù),只有當(dāng)此動(dòng)態(tài)鏈接庫(kù)的使用計(jì)數(shù)為0時(shí),才會(huì)真正被系統(tǒng)卸載。

(4)動(dòng)態(tài)庫(kù)錯(cuò)誤函數(shù):dlerror,函數(shù)原型為: const char *dlerror(void); 當(dāng)動(dòng)態(tài)鏈接庫(kù)操作函數(shù)執(zhí)行失敗時(shí),dlerror可以返回出錯(cuò)信息,返回值為NULL時(shí)表示操作函數(shù)執(zhí)行成功。

在取到函數(shù)執(zhí)行地址后,就可以在動(dòng)態(tài)庫(kù)的使用程序里面根據(jù)動(dòng)態(tài)庫(kù)提供的函數(shù)接口聲明調(diào)用動(dòng)態(tài)庫(kù)里面的函數(shù)。在編寫(xiě)調(diào)用動(dòng)態(tài)庫(kù)的程序的makefile文件時(shí),需要加入編譯選項(xiàng)-rdynamic和-ldl。

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久免费| 成人午夜av电影| 91豆麻精品91久久久久久| 亚洲欧洲韩国日本视频| 成人av一区二区三区| 亚洲图片激情小说| 欧美吻胸吃奶大尺度电影| 午夜视频一区二区| 日韩三级免费观看| 国产米奇在线777精品观看| 久久精品欧美一区二区三区麻豆 | 亚洲欧洲日韩综合一区二区| 成人福利视频网站| 亚洲伊人伊色伊影伊综合网| 在线不卡a资源高清| 韩日精品视频一区| 中文字幕一区二区三区色视频| 日本精品一区二区三区高清| 日韩高清不卡一区二区三区| 精品国产乱子伦一区| 国产69精品久久久久777| 亚洲视频一区二区在线| 欧美精品久久天天躁| 国产一区视频导航| 亚洲自拍偷拍欧美| 久久综合九色综合久久久精品综合 | 久久久不卡影院| 99久久99久久精品免费看蜜桃| 伊人夜夜躁av伊人久久| 日韩一级片在线观看| 99久久免费国产| 日韩不卡一二三区| 亚洲欧洲日韩一区二区三区| 欧美二区三区91| 不卡大黄网站免费看| 日日摸夜夜添夜夜添精品视频| 国产清纯白嫩初高生在线观看91 | 91性感美女视频| 日韩电影一区二区三区四区| 亚洲国产成人一区二区三区| 欧美久久久一区| 成人性生交大合| 美女视频网站久久| 一区在线观看视频| 日韩欧美一区二区久久婷婷| 91麻豆.com| 国产美女精品在线| 视频精品一区二区| 亚洲天堂精品视频| 欧美激情中文不卡| 欧美va在线播放| 欧美日韩mp4| 91亚洲精品一区二区乱码| 极品少妇xxxx偷拍精品少妇| 亚洲一区电影777| 亚洲欧洲无码一区二区三区| 久久久精品tv| 精品国产欧美一区二区| 欧美日韩精品一区二区三区| 91影院在线免费观看| 高清国产午夜精品久久久久久| 久久99精品久久久久婷婷| 亚洲福利国产精品| 一级中文字幕一区二区| 综合在线观看色| 国产欧美一区二区在线| 2023国产一二三区日本精品2022| 欧美女孩性生活视频| 欧美色中文字幕| 91国在线观看| 日本高清不卡aⅴ免费网站| www..com久久爱| 成人av在线播放网址| 成人综合在线观看| 成人精品高清在线| 东方欧美亚洲色图在线| 国产精品自拍av| 国产精品一区二区久久精品爱涩 | 美女在线视频一区| 99久久久国产精品免费蜜臀| 国产乱码精品一区二区三区忘忧草| 日本va欧美va精品| 免费在线成人网| 精品伊人久久久久7777人| 日本不卡一区二区三区高清视频| 天天色综合成人网| 日本亚洲视频在线| 精品一区二区三区不卡 | 欧美va亚洲va香蕉在线| 日韩视频一区二区三区在线播放| 欧美v亚洲v综合ⅴ国产v| 精品国产露脸精彩对白| 久久久久久久综合| 国产精品麻豆久久久| 亚洲日本乱码在线观看| 一二三区精品福利视频| 午夜欧美电影在线观看| 琪琪一区二区三区| 国产一区二区三区四| 成人国产精品免费观看视频| 91在线国产观看| 欧美日韩一区二区三区四区五区 | 蜜臀av国产精品久久久久| 美女诱惑一区二区| 国产成都精品91一区二区三| 91视频www| 7777精品伊人久久久大香线蕉的| 精品国产一区二区在线观看| 亚洲国产精品二十页| 亚洲美女在线一区| 蜜臀99久久精品久久久久久软件| 国产成人亚洲综合色影视| 色婷婷亚洲一区二区三区| 欧美福利视频一区| 中文字幕精品综合| 亚洲一区在线视频观看| 黄一区二区三区| 99精品久久99久久久久| 欧美精品久久99久久在免费线 | 一本色道综合亚洲| 欧美一区二区在线免费观看| 国产精品美女久久久久aⅴ国产馆| 亚洲综合色在线| 国产乱子轮精品视频| 91高清视频免费看| 久久久久久夜精品精品免费| 亚洲一区二区三区精品在线| 国产一区二区三区四| 精品1区2区3区| 国产欧美一区二区在线| 日本不卡一区二区| 色婷婷国产精品| 久久精品视频免费观看| 天天操天天综合网| 91色视频在线| 久久蜜桃一区二区| 亚洲成av人影院| 91原创在线视频| 久久一日本道色综合| 亚洲欧美另类小说视频| 精品午夜一区二区三区在线观看| 97成人超碰视| 26uuu成人网一区二区三区| 亚洲成人先锋电影| 99re8在线精品视频免费播放| 日韩欧美成人激情| 亚洲福利电影网| 色噜噜狠狠色综合欧洲selulu| 久久久高清一区二区三区| 日韩国产在线观看一区| 91美女精品福利| 欧美激情艳妇裸体舞| 国内精品不卡在线| 欧美一区二区三级| 午夜视频在线观看一区二区| 91视频com| 亚洲欧美视频一区| 成人黄页在线观看| 国产精品丝袜久久久久久app| 精品在线播放免费| 欧美电影免费观看高清完整版在线观看| 亚洲v精品v日韩v欧美v专区| 在线国产亚洲欧美| 亚洲欧美国产77777| 9i看片成人免费高清| 国产欧美日韩在线视频| 国产精品综合av一区二区国产馆| 欧美第一区第二区| 免费观看91视频大全| 日韩精品一区二区在线观看| 麻豆精品一区二区三区| 日韩免费电影网站| 久久99国产精品尤物| 久久一二三国产| 国产精品一卡二| 国产精品久久夜| 99久久婷婷国产精品综合| 亚洲欧美国产77777| 欧美亚洲国产一区二区三区va | 中文字幕一区二区三区不卡| 成人免费高清在线观看| 国产精品超碰97尤物18| 一本到一区二区三区| 亚洲一二三专区| 777精品伊人久久久久大香线蕉| 日韩激情中文字幕| 久久亚洲精品国产精品紫薇| 国产精品自在欧美一区| 中文字幕一区三区| 欧美体内she精高潮| 日产欧产美韩系列久久99| 日韩午夜激情av| 国模冰冰炮一区二区| 国产精品私人影院| 欧美伊人久久久久久久久影院| 日韩av成人高清| 日本一区二区三区久久久久久久久不| aaa亚洲精品一二三区| 午夜精品爽啪视频| 久久久久久免费毛片精品|