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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

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

?? 一些面試題集 供大家參考 希望大家找到合適的工作
?? TXT
?? 第 1 頁 / 共 2 頁
字號(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ù)手段。常見的動(dòng)態(tài)庫(kù)包含外部函數(shù)和資源,也有一些動(dòng)態(tài)庫(kù)只包含資源,如Windows字體資源文件,稱之為資源動(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)程的線程所訪問。DLL的句柄可以被調(diào)用進(jìn)程使用;調(diào)用進(jìn)程的句柄可以被DLL使用。

DLL模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL可以有自己的數(shù)據(jù)段,但沒有自己的堆棧,使用與調(diào)用它的應(yīng)用程序相同的堆棧模式;一個(gè)DLL在內(nèi)存中只有一個(gè)實(shí)例;DLL實(shí)現(xiàn)了代碼封裝性;DLL的編制與具體的編程語言及編譯器無關(guān),可以通過DLL來實(shí)現(xiàn)混合語言編程。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)用,也稱為隱式調(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來達(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語言寫的DLL程序,也可以創(chuàng)建基于MFC類庫(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í)需要編寫模塊定義文件(.DEF),它是用于描述DLL屬性的模塊語句組成的文本文件。

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

在Linux操作系統(tǒng)中,采用了很多共享對(duì)象技術(shù)(Shared Object),雖然它和Windows里的動(dòng)態(tài)庫(kù)相對(duì)應(yīng),但它并不稱為動(dòng)態(tài)庫(kù)。相應(yīng)的共享對(duì)象文件以.so作為后綴,為了方便,在本文中,對(duì)該概念不進(jì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還可以通過LD-PRELOAD變量讓開發(fā)人員可以使用自己的程序庫(kù)中的模塊來替換系統(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ì)過程中,通常流程是編寫用戶的接口文件,通常是.h文件,編寫實(shí)際的函數(shù)文件,以.c或.cpp為后綴,再編寫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)_打開動(dòng)態(tài)鏈接庫(kù):dlopen,函數(shù)原型void *dlopen (const char *filename, int flag); dlopen用于打開指定名字(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ù)。在編寫調(diào)用動(dòng)態(tài)庫(kù)的程序的makefile文件時(shí),需要加入編譯選項(xiàng)-rdynamic和-ldl。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利一区| 欧美日韩一区国产| 中文在线资源观看网站视频免费不卡| 蜜臀av一区二区在线观看| 91精品国产综合久久精品图片| 亚洲一区在线观看免费| 欧美精选一区二区| 国内成+人亚洲+欧美+综合在线| 国产亚洲欧美在线| 不卡视频免费播放| 亚洲最新视频在线观看| 欧美日韩国产高清一区二区| 久久超碰97人人做人人爱| 亚洲精品一区二区三区福利| 国产精品一级在线| 中文字幕一区二区三区在线不卡| 91搞黄在线观看| 久久精品免费观看| 国产精品久久久久久久午夜片| 在线观看日韩精品| 国产在线精品一区二区不卡了| 亚洲欧洲性图库| 91 com成人网| 成人免费视频一区| 男女激情视频一区| **性色生活片久久毛片| 69久久夜色精品国产69蝌蚪网| 国产激情91久久精品导航| 一区二区三区在线观看国产| 欧美tickling挠脚心丨vk| 91在线一区二区| 久久不见久久见免费视频1| 亚洲私人黄色宅男| 久久免费午夜影院| 欧美日韩在线观看一区二区| 国产老女人精品毛片久久| 亚洲自拍偷拍网站| 欧美激情一二三区| 日韩欧美中文字幕制服| 99久久er热在这里只有精品15| 日本视频在线一区| 亚洲欧美乱综合| 久久精品免费在线观看| 欧美日韩aaaaa| 91视频www| 国产成人av电影在线观看| 日韩激情一二三区| 一区二区高清视频在线观看| 国产亚洲人成网站| 欧美不卡视频一区| 欧美精品少妇一区二区三区| 91亚洲精品一区二区乱码| 国产一区二区在线视频| 日韩和欧美一区二区| 一区二区三区av电影| 中文成人综合网| 久久奇米777| 欧美α欧美αv大片| 制服.丝袜.亚洲.中文.综合| 日本韩国欧美国产| 91网址在线看| 99久久婷婷国产精品综合| 国产精品88av| 国产精品影音先锋| 韩国理伦片一区二区三区在线播放| 亚洲成a人片在线观看中文| 亚洲精品成人悠悠色影视| ...xxx性欧美| 亚洲精品免费看| 中文字幕亚洲欧美在线不卡| 国产精品视频yy9299一区| 国产日韩三级在线| 国产亚洲一区二区三区| 久久先锋影音av| 国产色产综合产在线视频| 久久久久久亚洲综合| 久久久久久99久久久精品网站| 精品福利一二区| 欧美成人一区二区三区片免费| 日韩精品影音先锋| 日韩欧美123| 久久中文字幕电影| 国产亚洲精品aa| 国产精品毛片a∨一区二区三区| 亚洲国产电影在线观看| 中文字幕日韩精品一区 | 日韩亚洲欧美高清| 欧美一区欧美二区| 欧美成人精品1314www| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | www欧美成人18+| 国产欧美1区2区3区| 成人欧美一区二区三区小说 | 国产欧美一区二区精品忘忧草| 国产欧美一区视频| 亚洲免费av高清| 视频一区中文字幕| 国产一区二区在线免费观看| 国产高清一区日本| 在线观看视频一区二区| 91精品国产美女浴室洗澡无遮挡| 日韩一区二区三| 国产欧美精品一区二区色综合| **网站欧美大片在线观看| 亚洲电影欧美电影有声小说| 狠狠网亚洲精品| 99re热视频精品| 6080日韩午夜伦伦午夜伦| 亚洲国产成人自拍| 亚洲不卡在线观看| 国产不卡一区视频| 欧美色成人综合| 国产欧美日韩精品a在线观看| 亚洲欧美精品午睡沙发| 日本免费新一区视频| 丰满少妇在线播放bd日韩电影| 91国产精品成人| 国产午夜精品在线观看| 亚洲香肠在线观看| 激情小说亚洲一区| 欧美日韩一区视频| 国产精品久久久久久久裸模| 免费在线观看精品| 色综合久久综合网欧美综合网 | 亚洲一卡二卡三卡四卡无卡久久| 久久91精品久久久久久秒播| voyeur盗摄精品| 日韩欧美一区二区视频| 亚洲欧美在线观看| 国产自产高清不卡| 欧美日韩大陆在线| 国产精品国产三级国产有无不卡 | 国产精品国产馆在线真实露脸 | 亚洲国产中文字幕| 成人精品视频一区二区三区 | 香蕉久久一区二区不卡无毒影院| 国产大陆a不卡| 日韩欧美卡一卡二| 亚洲国产精品久久久久秋霞影院| 国产成人av自拍| 日韩欧美在线观看一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 夫妻av一区二区| 久久这里只有精品视频网| 天堂蜜桃91精品| 91久久精品国产91性色tv| 国产精品午夜在线| 国产成人在线色| 精品国产三级a在线观看| 日韩制服丝袜先锋影音| 在线亚洲+欧美+日本专区| 国产精品国产精品国产专区不蜜 | 4438x亚洲最大成人网| 亚洲人成小说网站色在线| 国产91精品露脸国语对白| 欧美精品一区二区久久婷婷| 日本不卡高清视频| 欧美日韩国产一二三| 无吗不卡中文字幕| 91久久线看在观草草青青| 亚洲欧美另类图片小说| 91麻豆视频网站| 成人欧美一区二区三区小说| 92精品国产成人观看免费 | 欧美性猛片xxxx免费看久爱| 亚洲欧美日韩一区二区 | 欧美成人高清电影在线| 亚洲午夜久久久久中文字幕久| 丁香一区二区三区| 欧美国产日本韩| 成人久久视频在线观看| 自拍偷拍国产亚洲| 日本精品视频一区二区三区| 国产精品久久三| 99在线热播精品免费| 亚洲视频每日更新| 色呦呦日韩精品| 亚洲一区二区欧美| 欧美日韩精品一区二区三区蜜桃 | 国产suv一区二区三区88区| 久久先锋资源网| 99这里只有久久精品视频| 亚洲一区二区av在线| 日韩一区二区三免费高清| 国产精华液一区二区三区| 日韩理论片在线| 欧美精品久久99| 精品一区二区三区免费观看| 国产精品午夜久久| 色综合久久中文字幕综合网| 亚洲福利一二三区| 精品免费国产一区二区三区四区| 国产一区二区三区电影在线观看| 中文字幕高清不卡| 欧美三级三级三级爽爽爽| 国产在线观看免费一区| 一区在线观看视频| 制服丝袜亚洲播放| 丁香天五香天堂综合| 午夜激情一区二区三区|