靜態(tài)庫:在鏈接步驟中师痕,連接器將從庫文件取得所需的代碼,復(fù)制到生成的可執(zhí)行文件中而账,這種庫稱為靜態(tài)庫胰坟,其特點是可執(zhí)行文件中包含了庫代碼的一份完整拷貝;缺點就是被多次使用就會有多份冗余拷貝泞辐。即靜態(tài)庫中的指令都全部被直接包含在最終生成的 EXE 文件中了腕铸。在vs中新建生成靜態(tài)庫的工程,編譯生成成功后铛碑,只產(chǎn)生一個.lib文件
動態(tài)庫:動態(tài)鏈接庫是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫狠裹,DLL不是可執(zhí)行文件。動態(tài)鏈接提供了一種方法汽烦,使進程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)涛菠。函數(shù)的可執(zhí)行代碼位于一個 DLL 中,該 DLL 包含一個或多個已被編譯撇吞、鏈接并與使用它們的進程分開存儲的函數(shù)俗冻。在vs中新建生成動態(tài)庫的工程,編譯成功后牍颈,產(chǎn)生一個.lib文件和一個.dll文件
靜態(tài)庫中的lib:該LIB包含函數(shù)代碼本身(即包括函數(shù)的索引迄薄,也包括實現(xiàn)),在編譯時直接將代碼加入程序當中
動態(tài)庫中的lib:該LIB包含了函數(shù)所在的DLL文件和文件中函數(shù)位置的信息(索引)煮岁,函數(shù)實現(xiàn)代碼由運行時加載在進程空間中的DLL提供
總之讥蔽,lib是編譯時用到的,dll是運行時用到的画机。如果要完成源代碼的編譯冶伞,只需要lib;如果要使動態(tài)鏈接的程序運行起來步氏,只需要dll响禽。
原來我在VS工程已經(jīng)lib庫加進去但編譯的時候老是出現(xiàn)
LINK2019 error:
是因為沒有將相應(yīng)的dll庫也加進去,這樣只能找頭文件定義,卻找不到可執(zhí)行代碼芋类。