看板 C_and_CPP 關於我們 聯絡資訊
在使用DLL和LIB之間有點搞不清楚, 使用VC的project可以選擇DLL或static library, 選擇DLL的project,build出來會是一個dll, 選擇static library,build出來會是一個lib, dll中的function要export出去有兩個選擇, 1. 使用def檔 2. 使用__declspec(dllexport)關鍵字 若使用方法2,則除了build出dll檔外,還會再build出一個lib檔, 若用靜態連結來使用該dll的話,除了需要dll檔,還需要link額外產生的lib檔 以及include該dll的header file... 若使用動態連結,則只需要dll檔即可 Q1. 為什麼使用靜態連結還除了dll檔之外需要lib檔呢? Q2. 從方法2產生出來的lib檔,和從選擇static library project產生出來的lib檔 有什麼不同呢? Q3. dll和lib檔裡放的都是object code,兩者之間有什麼不同呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.139.164
meconin:Q1, 因為在 link 的時候,要配置這些 dll 中 function的位 01/05 23:32
meconin:址,Windows 其實是先配置為類似 LoadLibrary的函式,執行 01/05 23:33
meconin:時,方便 load 起來。我記得 LoadLibrary 的位址每個程序 01/05 23:34
meconin:都一樣,或許就是為了這個目的 01/05 23:35
LPH66:Q2. 你可以比較一下兩者的大小 通常 dll+lib 的 lib 會小些 01/06 00:34
LPH66:因為那裡面的程式做的事就是我前面幾樓在說的而已 01/06 00:34
LPH66:實際的東西還是在 dll 裡面 01/06 00:34
LPH66:而 static library 的 lib 則是把實際做事的程式包進去了 01/06 00:35
LPH66:所以通常會跟另一邊的 dll 差不多大小 01/06 00:35