• 當前位置:首頁 > IT技術 > Windows編程 > 正文

    【合并lib】windows下多個lib合并的方法|查看lib是導入庫還是靜態庫
    2021-09-28 16:50:44

    靜態庫:VS工程設置為生成lib

    導入庫:VS工程設置為生生成DLL,VS生成DLL的同時 生成一個lib,這個就是導入庫。只記錄函數在DLL的位置沒有實現函數

    ?

    ?

    方法一:

    ?????? VS項目-》屬性-》配置屬性-》庫管理器-》常規-》附加依賴項---> 添加需要合并的靜態庫lib

    ?????? --->附加庫目錄??? 添加需要合并的靜態庫lib 所在的路徑

    方法二:

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

    ??? 在出來的Dos窗口中,輸入命令:

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

    該目錄下會生成合并后的lib庫object.lib

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

    ?? ?

    ?

    查看lib是導入庫還是靜態庫的方法

    lib /list [文件名] 顯示dll的是導入庫,顯示.obj或者.o是靜態庫

    例如:

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

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

    ?

    ?

    lib導入庫有什么用

    ?通過前面三篇的介紹,靜態lib庫,就完全講清楚了。那么這里我們來介紹一下lib導入庫。雖然lib導入庫不是很重要,但是為了方便使用dll,lib導入庫還是很常用。但是沒有lib導入庫,也是可以使用dll的。所以說,lib導入庫是一個附加的增值產品。

    ???dll是用來動態鏈接的,也就是程序運行時才鏈接的。靜態鏈接就是在生成exe時就鏈接到exe里了。鏈接最終的目的是要將dll載入到和exe同一個進程空間中。盡管這里是動態鏈接,它只是在鏈接的時間上延遲罷了。靜態鏈接時,直接在生成時將庫的內容放在了exe中,當exe文件加載到內存時,鏈接的庫的內容也加載到內存了。動態鏈接庫dll則是在生成exe的時候只用了一個占位表,叫做重定位表。然后在exe需要的時候,再將dll加載到exe所在的進程的內存空間中。

    ???所以說,不管是靜態鏈接還是動態鏈接,最終都是要到exe的進程內存空間中的,是跑不了的。躲得了初一躲不了十五,dll只是延遲加載到內存罷了。

    ???我們要使用dll,為了方便知道dll中的所有函數都在什么位置,就用上了lib導入庫。這個導入庫記錄了dll中的所有函數在dll中的位置,那么我們引入了lib導入庫之后,在運行的時候,在加載了dll后,就可以方便的定位需要的函數了。有了這個lib導入庫,我們不需要手動的去找dll中的函數了。使用dll就和靜態lib庫或者和直接的源碼中寫的函數一樣簡單。

    ???另一種就不用lib導入庫了,使用API函數LoadLibrary來加載dll到內存中,然后使用API函數GetProcAddress來找到dll中的函數地址。這里的使用,將在dll的專題中講解,就不多述了。

    ?

    ?

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

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码