靜態鏈結庫與動態鏈結庫總結

2021-04-23 18:16:51 字數 872 閱讀 4001

1:在生成lib檔案的時候並不發生連線的過程,編譯器僅僅把obj檔案裝載為乙個lib檔案。

例如:static1:int add(int a,int b) int sub(int a, int b)

static2: int myadd(int a, int b) int mysub(int a, int b)

這個時候在static2工程中無論是否指定static1,編譯都會通過的,只要在static2中宣告add和sub,而且在靜態鏈結庫工程中project-setting 沒有出現link這個選項,所以可以斷定是不經過鏈結的。

2:在發布可執行檔案的時候是不需要發布lib檔案的,但是在發布靜態庫檔案的時候要把依附於該靜態庫的其他靜態庫一起發布,這個被許多人忽視。

動態鏈結庫

1:動態連線庫的標頭檔案以及cpp檔案的格式:

標頭檔案的寫法如下:

#ifndef my_dll1_hpp

#define my_dll1_hpp

///防止標頭檔案被重複包含

#ifdef __cplusplus

extern "c"

#endif

#endif

cpp檔案的寫法:

#define dll_api

#include "my_dll1.hpp"

int addnum(int, int);

int my_add(int a, int b)

這種寫法比較方便管理,而且比較省事。

3:在使用extern"c"的時候,是不能進行函式的過載的,因為c編譯器不支援函式過載。

4:匯出某個類,在class後面和類名之間加入_declspec(dllexport)可以匯出整個類,或者在類的成員函式名直接加入可以匯出部分函式。

動態鏈結庫與靜態鏈結庫

有人會想,動態鏈結這樣麻煩,為什麼還要用呢?這裡有乙個技術問題,對這個問題的解決直接導致了動態載入的需求。問題是有些dll只在某個windows版本中存在,或某個api只在某些windows版本中被加入指定的dll。當你使用靜態鏈結的.exe試圖在不支援的windows版本上執行時,系統會彈出系統對...

動態鏈結庫與靜態鏈結庫

原貼出處 http blog.csdn.net benny5609 archive 2008 04 17 2298998.aspxs 還有參考 http msdn.microsoft.com zh cn library 1ez7dh12 v vs.100 aspxs 首先通過乙個簡單的靜態鏈結庫的例...

靜態鏈結 庫 與動態鏈結 庫

靜態鏈結與動態鏈結 簡單的說,靜態庫和應用程式編譯在一起,在任何情況下都能執行,而動態庫是動態鏈結,顧名思義就是在應用程式啟動的時候才會鏈結,所以,當使用者的系統上沒有該動態庫時,應用程式就會執行失敗。再看它們的特點 動態庫 1.共享 多個應用程式可以使用同乙個動態庫,啟動多個應用程式的時候,只需要...