Re: [問題] 靜態函式庫轉動態函式庫
看板C_and_CPP (C/C++)作者purpose (purpose)時間15年前 (2010/10/19 18:13)推噓3(3推 0噓 14→)留言17則, 4人參與討論串2/2 (看更多)
剛剛用簡單的例子建 static library,然後用 lib.exe /extract 抽出每個 *.obj,
再自己寫個 .def 然後重新 link 出 dll,這樣跑是可以產生 dll 啦。
但比較複雜的程式,大概就沒辦法連結成功了。
foo1.c
---------
int foo1() {
return 100;
}
---------
foo2.c
---------
int foo2() {
return 200;
}
產生目的檔: cl.exe /c foo1.c foo2.c
產生靜態連結檔: lib.exe foo1.obj foo2.obj
至此,得到靜態連結程式庫「foo1.lib」,可提供 foo1 及 foo2 函數。
刪掉 foo1.c foo2.c foo1.obj foo2.obj。
==================================================================
dumpbin /ARCHIVEMEMBERS foo1.lib
得知內有 foo1.obj 及 foo2.obj
故分別執行
lib.exe foo1.lib /EXTRACT:foo1.obj
lib.exe foo1.lib /EXTRACT:foo2.obj
撰寫模組定義檔 foo.def,假設 dll 將只匯出 foo1 函數:
-----------------------------
LIBRARY myfoo
EXPORTS
foo1
-----------------------------
連結出 dll 檔:
link.exe foo1.obj foo2.obj /DEF:foo.def
則取得動態連結程式庫「myfoo.dll」及匯入用程式庫「foo1.lib」
可以用隱式連結呼叫之。
main.c
----------------------------
#include <stdio.h>
#pragma comment(lib, "foo1")
int foo1();
int main() {
printf("ret = %d\n", foo1());
return 0;
}
----------------------------
檢驗匯入表:dumpbin main.exe /IMPORTS:myfoo.dll
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.131.103
推
10/19 18:18, , 1F
10/19 18:18, 1F
→
10/19 18:30, , 2F
10/19 18:30, 2F
→
10/19 18:46, , 3F
10/19 18:46, 3F
推
10/19 18:48, , 4F
10/19 18:48, 4F
→
10/19 18:50, , 5F
10/19 18:50, 5F
→
10/19 18:50, , 6F
10/19 18:50, 6F
→
10/19 18:52, , 7F
10/19 18:52, 7F
→
10/19 18:53, , 8F
10/19 18:53, 8F
→
10/19 18:54, , 9F
10/19 18:54, 9F
→
10/19 19:10, , 10F
10/19 19:10, 10F
→
10/19 19:10, , 11F
10/19 19:10, 11F
→
10/19 19:10, , 12F
10/19 19:10, 12F
推
10/19 22:36, , 13F
10/19 22:36, 13F
→
10/19 22:36, , 14F
10/19 22:36, 14F
→
10/19 22:36, , 15F
10/19 22:36, 15F
→
10/19 22:37, , 16F
10/19 22:37, 16F
→
10/19 22:37, , 17F
10/19 22:37, 17F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章