原文連接地址:http://www.cnblogs.com/skynet/p/3372855.html、http://www.javashuo.com/article/p-rfmlywut-gm.htmlhtml
靜態連接庫
- 包含:頭文件 .h 、靜態庫 .lib
- .lib包含了實際執行代碼、符號表等等。
- .lib中的指令都所有被直接包含在最終生成的 EXE 文件中。
- 靜態連接庫中不能再包含其餘的動態連接庫或者靜態庫。
- 對函數庫的連接是放在編譯時期完成的。
- 程序在運行時與函數庫沒有瓜葛,移植方便。
- 浪費空間和資源。
動態連接庫
- 包含:頭文件 .h 、導入庫 .lib 、動態庫 .dll
- 其實際的執行代碼位於.dll中,.lib只包含了地址符號表等,確保程序找到對應函數的一些基本地址信息。
- .dll沒必要被包含在最終exe文件中,exe文件執行時能夠「動態」地引用和卸載這個與 exe獨立的dll文件。
- 動態連接庫中還能夠再包含其餘的動態或靜態連接。
- 將庫函數的連接載入推遲到程序運行時期。
- 能夠實現進程間的資源共享(所以也稱爲共享庫)。
- 將一些程序升級變得簡單。
- 能夠真正的作到連接載入徹底由程序員在程序代碼中控制(顯示調用)。
編譯過程
![1 1](http://static.javashuo.com/static/loading.gif)
建立靜態庫過程
![2 2](http://static.javashuo.com/static/loading.gif)
建立靜態庫
![3 3](http://static.javashuo.com/static/loading.gif)
靜態庫與動態庫比較
![4 4](http://static.javashuo.com/static/loading.gif)
![5 5](http://static.javashuo.com/static/loading.gif)