亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁(yè) > IT技術(shù) > Windows編程 > 正文

              【合并lib】windows下多個(gè)lib合并的方法|查看lib是導(dǎo)入庫(kù)還是靜態(tài)庫(kù)
              2021-09-28 16:50:44

              靜態(tài)庫(kù):VS工程設(shè)置為生成lib

              導(dǎo)入庫(kù):VS工程設(shè)置為生生成DLL,VS生成DLL的同時(shí) 生成一個(gè)lib,這個(gè)就是導(dǎo)入庫(kù)。只記錄函數(shù)在DLL的位置沒(méi)有實(shí)現(xiàn)函數(shù)

              ?

              ?

              方法一:

              ?????? VS項(xiàng)目-》屬性-》配置屬性-》庫(kù)管理器-》常規(guī)-》附加依賴項(xiàng)---> 添加需要合并的靜態(tài)庫(kù)lib

              ?????? --->附加庫(kù)目錄??? 添加需要合并的靜態(tài)庫(kù)lib 所在的路徑

              方法二:

              ??? 開(kāi)始-》所有程序-》Microsoft Visual studio 2010-》visual studio tools-》Visual studio 命令提示符

              ??? 在出來(lái)的Dos窗口中,輸入命令:

              ? lib.exe /out:objectlib.lib lib1.lib lib2.lib

              該目錄下會(huì)生成合并后的lib庫(kù)object.lib

              ? (或lib.exe /out:D:objectlib.lib?? D:mylib*.lib?? 將D:mylib目錄下的lib合并為objectlib.lib)存在D目錄下)

              ?? ?

              ?

              查看lib是導(dǎo)入庫(kù)還是靜態(tài)庫(kù)的方法

              lib /list [文件名] 顯示dll的是導(dǎo)入庫(kù),顯示.obj或者.o是靜態(tài)庫(kù)

              例如:

              ? 開(kāi)始-》所有程序-》Microsoft Visual studio 2010-》visual studio tools-》Visual studio 命令提示符

              lib.exe? /list?? C:/a.lib

              ?

              ?

              lib導(dǎo)入庫(kù)有什么用

              ?通過(guò)前面三篇的介紹,靜態(tài)lib庫(kù),就完全講清楚了。那么這里我們來(lái)介紹一下lib導(dǎo)入庫(kù)。雖然lib導(dǎo)入庫(kù)不是很重要,但是為了方便使用dll,lib導(dǎo)入庫(kù)還是很常用。但是沒(méi)有l(wèi)ib導(dǎo)入庫(kù),也是可以使用dll的。所以說(shuō),lib導(dǎo)入庫(kù)是一個(gè)附加的增值產(chǎn)品。

              ???dll是用來(lái)動(dòng)態(tài)鏈接的,也就是程序運(yùn)行時(shí)才鏈接的。靜態(tài)鏈接就是在生成exe時(shí)就鏈接到exe里了。鏈接最終的目的是要將dll載入到和exe同一個(gè)進(jìn)程空間中。盡管這里是動(dòng)態(tài)鏈接,它只是在鏈接的時(shí)間上延遲罷了。靜態(tài)鏈接時(shí),直接在生成時(shí)將庫(kù)的內(nèi)容放在了exe中,當(dāng)exe文件加載到內(nèi)存時(shí),鏈接的庫(kù)的內(nèi)容也加載到內(nèi)存了。動(dòng)態(tài)鏈接庫(kù)dll則是在生成exe的時(shí)候只用了一個(gè)占位表,叫做重定位表。然后在exe需要的時(shí)候,再將dll加載到exe所在的進(jìn)程的內(nèi)存空間中。

              ???所以說(shuō),不管是靜態(tài)鏈接還是動(dòng)態(tài)鏈接,最終都是要到exe的進(jìn)程內(nèi)存空間中的,是跑不了的。躲得了初一躲不了十五,dll只是延遲加載到內(nèi)存罷了。

              ???我們要使用dll,為了方便知道dll中的所有函數(shù)都在什么位置,就用上了lib導(dǎo)入庫(kù)。這個(gè)導(dǎo)入庫(kù)記錄了dll中的所有函數(shù)在dll中的位置,那么我們引入了lib導(dǎo)入庫(kù)之后,在運(yùn)行的時(shí)候,在加載了dll后,就可以方便的定位需要的函數(shù)了。有了這個(gè)lib導(dǎo)入庫(kù),我們不需要手動(dòng)的去找dll中的函數(shù)了。使用dll就和靜態(tài)lib庫(kù)或者和直接的源碼中寫(xiě)的函數(shù)一樣簡(jiǎn)單。

              ???另一種就不用lib導(dǎo)入庫(kù)了,使用API函數(shù)LoadLibrary來(lái)加載dll到內(nèi)存中,然后使用API函數(shù)GetProcAddress來(lái)找到dll中的函數(shù)地址。這里的使用,將在dll的專題中講解,就不多述了。

              ?

              ?

              本文摘自 :https://blog.51cto.com/l

              開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >