[問題] DLL的使用

看板C_and_CPP (C/C++)作者 (改)時間14年前 (2012/01/05 22:43), 編輯推噓1(108)
留言9則, 2人參與, 最新討論串1/2 (看更多)
在使用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

01/05 23:32, , 1F
Q1, 因為在 link 的時候,要配置這些 dll 中 function的位
01/05 23:32, 1F

01/05 23:33, , 2F
址,Windows 其實是先配置為類似 LoadLibrary的函式,執行
01/05 23:33, 2F

01/05 23:34, , 3F
時,方便 load 起來。我記得 LoadLibrary 的位址每個程序
01/05 23:34, 3F

01/05 23:35, , 4F
都一樣,或許就是為了這個目的
01/05 23:35, 4F

01/06 00:34, , 5F
Q2. 你可以比較一下兩者的大小 通常 dll+lib 的 lib 會小些
01/06 00:34, 5F

01/06 00:34, , 6F
因為那裡面的程式做的事就是我前面幾樓在說的而已
01/06 00:34, 6F

01/06 00:34, , 7F
實際的東西還是在 dll 裡面
01/06 00:34, 7F

01/06 00:35, , 8F
而 static library 的 lib 則是把實際做事的程式包進去了
01/06 00:35, 8F

01/06 00:35, , 9F
所以通常會跟另一邊的 dll 差不多大小
01/06 00:35, 9F
文章代碼(AID): #1F1RSWHO (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
文章代碼(AID): #1F1RSWHO (C_and_CPP)