回覆列表
  • 1 # 你永遠追不上的巨人

    靜態連線庫就是把(lib)檔案中用到的函式程式碼直接連結進目標程式,程式執行的時候不再需要其它的庫檔案;動態連結就是把呼叫的函式所在檔案模組(DLL)和呼叫函式在檔案中的位置等資訊連結進目標程式,程式執行的時候再從DLL中尋找相應函式程式碼,因此需要相應DLL檔案的支援。靜態連結庫與動態連結庫都是共享程式碼的方式,如果採用靜態連結庫,則無論你願不願意,lib 中的指令都全部被直接包含在最終生成的 EXE 檔案中了。但是若使用 DLL,該 DLL 不必被包含在最終 EXE 檔案中,EXE 檔案執行時可以“動態”地引用和解除安裝這個與 EXE 獨立的 DLL 檔案。靜態連結庫和動態連結庫的另外一個區別在於靜態連結庫中不能再包含其他的動態連結庫或者靜態庫,而在動態連結庫中還可以再包含其他的動態或靜態連結庫。動態庫就是在需要呼叫其中的函式時,根據函式對映表找到該函式然後調入堆疊執行。如果在當前工程中有多處對dll檔案中同一個函式的呼叫,那麼執行時,這個函式只會留下一份複製。但是如果有多處對lib檔案中同一個函式的呼叫,那麼執行時,該函式將在當前程式的執行空間裡留下多份複製,而且是一處呼叫就產生一份複製。靜態連結庫與靜態連結庫呼叫規則總體比較如下:1、 靜態連結庫(比較簡單):首先,靜態連結庫的使用需要庫的開發者提供生成庫的.h標頭檔案和.lib檔案。生成庫的.h標頭檔案中的宣告格式如下:extern "C" 函式返回型別 函式名(引數表);在呼叫程式的.cpp原始碼檔案中如下:#include "../lib.h"#pragma comment(lib,"..//debug//libTest.lib") //指定與靜態庫一起連結其次因為靜態連結庫是將全部指令都包含入呼叫程式生成的EXE檔案中。因此如果用的是靜態連結庫,那麼也就不存在“匯出某個函式提供給使用者使用”的情況,要想用就得全要!要不就都別要!靜態連結庫(Lib)在VC++6.0中new一個名稱為libTest的static library工程,並新建lib.h和lib.cpp兩個檔案,lib.h和lib.cpp的原始碼如下://檔案:lib.h#ifndef LIB_H#define LIB_Hextern "C" int add(int x,int y);   //宣告為C編譯、連線方式的外部函式#endif#include "lib.h"int add(int x,int y){ return x + y; }#include

  • 中秋節和大豐收的關聯?
  • 長臉短髮怎麼扎頭髮?