1. 程式人生 > >lib和dll文件的初了解

lib和dll文件的初了解

無需 不同 也有 cpp 文件的 缺點 如果 鏈接庫 使用


lib,dll這兩樣東西在許多編程書中都很少出現,但實際工程中,這兩樣東西的作用確實非常重要,我覺得c++程序員都有必要了解這兩樣東西。


首先總共有 動態鏈接 和 靜態鏈接 這兩種鏈接方式

靜態鏈接:

靜態鏈接使用靜態鏈接庫lib,且只在源代碼編譯時用到(編譯期)。
編譯生成靜態庫時會生成一個.lib文件
.lib裏面裝載了各種類,函數的實現。
這種靜態鏈接的lib實際上是多個obj文件的集合。

為什麽需要靜態鏈接?

在實際工程中,往往各模塊的規模龐大(一堆.h .cpp文件)
而編譯時,每個.cpp對應生成.obj文件,一個模塊生成一堆obj文件,瞬間把文件夾塞滿,造成維護的不便性
為了解決這問題,可以將每個主要模塊先編譯成一個.lib文件,再使用靜態鏈接的方法,在編譯期將各模塊的.lib的文件鏈接起來。

動態鏈接:

動態鏈接使用動態鏈接庫dll,且只在程序啟動時用到(運行期)
編譯生成動態鏈接庫時會生成一個.dll文件和一個.lib文件

.dll存放了各函數,.exe剛開始運行時就會動態鏈接上所需的.dll文件(運行期)

.lib則一般是一些索引信息,記錄了dll中函數的入口和位置(跟靜態鏈接庫的lib不同),不過仍然只在編譯期用到(編譯期)

為什麽需要動態鏈接?

由於.dll存放了各函數,.exe裏無需再存放.dll已含有的函數,只需調用時存放相應的函數地址,這樣可以將.exe的空間大小轉移一部分給.dll。
在大型軟件的更新中,如果更新一個龐大的exe文件,負擔想必是極大的。如果僅針對其中某幾個.dll更新,則可以減少更新的大小。提高靈活性。
缺點還是有的,在程序剛開始運行時,程序會動態鏈接n個.dll,這個操作需要花時間。
(某些大型遊戲,點開圖標後,半天都不把程序彈出來,大概也有這個原因- -||)

lib和dll文件的初了解