靜態庫:
是用namespace包括的類或 函式,也可以有變數(不推薦有)
聲名引入編碼:引入標頭檔案來聲名,聲名後便可以在標頭檔案中使用,
動態庫:
可以使用namespace包含庫頭,匯出的要有_declspec(dllexport) 聲名,生成的lib僅有_declspec(dllexport)名聲的介面會鏈結,同時dll的lib中用乙個dllmain會鏈結進入
程式中,dllmain實現初使化dll,導會函式也只是鏈結跳到位置。
定位址才跳轉。
關於顯示呼叫和隱式呼叫,亦可以說是靜態呼叫和動態呼叫,乙個是編譯器loadliabrary,乙個是你自己loadlibrary
隱式呼叫原理是 由編譯器載入dll確定位址後計算出函式跳轉位址生成lib檔案,直接鏈結lib檔案跳轉到函式。 編譯器自動新增一段loadlibrayr**並查出所在匯出函式的
跳轉位址。vs2010的的延遲載入是使用到時載入,若不延遲載入則程式是一開始便載入不管是否使用到。
顯式呼叫用 是程式設計師用loadbrary載入查詢它的位置。
都要linker #pragma(lib,***):
vs2010 中隱式呼叫,設定延遲dll 也可以通過#pragma 設定使
延遲載入dll:
使用目的:如果在win2000中設計的程式使用了win98沒有的新函式,而要在98上執行,如果不應有延遲載入技術,將會終止程序。
方法(兩步): 1、
常規建立dll和可執行模組; 2、
a) /lib: delayimp.lib // 需要delayimp.lib庫(
b) /delayload: mydll.dll
///
// 實踐:把下面的**新增給需要此功能的模組
u #include // 需要的標頭檔案
u #pragma comment(lib, "delayimp.lib") // 庫
u #pragma comment(linker, "/delayload:delayloadlib.dll") // 延遲載入的庫
u #pragma comment(linker, "/delay:unload") // 可以手工解除安裝,可選
u //#pragma comment(linker, "/delay:nobind") // 不繫結,通常不要!
///
情況如下: 使用到時vs2010自己loadlibrary進入;
自己loadlibrary 和freelibrary
靜態庫與動態庫
linux下靜態庫 a 的例子 mylib.h 位於include資料夾下 ifndef mylib h define mylib h int add int a,int b endif mylib.cpp 位於lib資料夾中 include mylib.h int add int a,int b ...
靜態庫與動態庫
庫本質上是一種可執行的二進位制 可以被作業系統載入 linux和windows的庫是不相容的 庫可以分為靜態塊和動態庫,二者的不同點在於 被載入的時刻不同。靜態庫 在程式編譯時會被連線到目標 中,程式執行時不再需要改靜態庫,體積較大,一般應用與移植過程中在宿主機上編譯的 靜態庫檔名的命名規範是以li...
靜態庫與動態庫
1.靜態庫 工程在呼叫靜態庫時,複製靜態庫,源 加長,不節省程式空間。字尾名.a 優點 程式設計後不需要再依賴庫 以空間換時間 建立靜態庫 gcc c 原始檔.c ar rcs rcu 靜態庫名 目標檔案1 目標檔案2 rc 靜態庫不存在,就建立該庫檔案 s 更新靜態庫 使用 gcc o file ...