windows下lib文件文件解析 dll.lib windows下動態庫dll也要有個 lib


靜態lib文件

靜態lib文件實際上就是任意個obj文件的集合,而obj文件就是cpp文件編譯之后產生的一種文件,一個cpp文件編譯之后只會產生一個obj文件,而多個obj文件就可以連接生成lib文件。
靜態lib文件實際上是包含了所有的導出聲明和實現。你如果把這個lib文件鏈接到自己的程序之后,這個lib文件中的所有代碼都會嵌入進來,哪怕你只用到了其中一部分,剩下沒用到的也進了你的代碼。自然會導致你的庫體積沒有意義地變大,失去了使用動態庫的靈活性,而且發布新的版本時必須要發布新的應用程序才行,而不是簡單打個補丁就好。就是因為這種缺點,才會出現動態dll調用這種方式。

動態lib文件和dll文件

一個dll工程生成一個dll文件的時候,總是伴隨着生成一個lib文件,這個lib文件其實是一個動態的lib,它的大小比靜態lib要小很多,因為這個lib文件其實只是包含了一些函數索引信息,記錄了dll中那些函數的入口和位置,dll中才是具體的函數實現。那么為什么有了dll,還要有一個lib呢?
這就是動態庫鏈接的過程了,首先配置好動態lib庫目錄和動態dll目錄,以及頭文件的目錄。然后在你的代碼中include用到的頭文件,代碼完成之后有兩個過程:(1)編譯:這個過程只需要用到這里的動態lib文件【注:在靜態lib的情況下,仍然只是在編譯階段用到lib文件,只不過靜態lib文件包含了完整的實現,所以編譯生成exe之后就可以直接用了而已】,然后和你的代碼打包到一起。(2)運行:這個過程就需要用到dll文件了,上面打包好的東西里面,只是記錄下了那些用到的函數的入口和具體位置,並沒有真正的實現代碼,所以在運行期間,就由那些入口找到正確的位於dll中的位置,然后直接執行那些函數就行了。
dll其實就是exe,只不過它沒有main函數,所以不能單獨執行而已。事實上, 在實際的使用過程中我們也發現,很多應用程序都並不是一個完整的單獨可執行文件,它們被分割成一些單獨的相對對立的動態鏈接庫,只有在執行應用程序的時候,用到的dll才會被調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM