作者pracinverse (改)
看板C_and_CPP
標題[問題] DLL的使用
時間Thu Jan 5 22:43:42 2012
在使用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