近期由於不再使用vs生成lib,考慮使用windows下gcc生成乙個動態庫,供第三方呼叫,發現編譯之後只有dll,lib如何處理?
好吧,這就是本文的目的。
visual c++ 開發工具提供了兩個命令列工具,乙個是dumpbin.exe,另乙個是lib.exe。利用這兩個工具即可從dll匯出其對應的lib。
在命令列執行:
dumpbin /exports target.dll > target.def
exports
fn @1
fn @2
在命令列執行
lib /def:target.def /machine:i386 /out:target.lib
用下面的原始碼驗證下,儲存為export.c
/*
* compile with gcc 4.8.1
* gcc export.c -c -o test.exe
* gcc -wall -shared export.c -o export.dll
* */
#include const char * get_version_string()
int select_mode(int mode)
gcc編譯後生成export.dll,執行上面的第一步,輸出的def格式如下:
microsoft (r) coff/pe dumper version 10.00.40219.01
dump of file export.dll
file type: dll
section contains the following exports for export.dll
00000000 characteristics
5732c473 time date stamp wed may 11 13:34:43 2016
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint rva name
1 0 00001280 get_version_string
2 1 0000128a select_mode
summary
1000 .crt
1000 .bss
1000 .data
1000 .edata
1000 .eh_fram
1000 .idata
1000 .rdata
1000 .reloc
1000 .text
1000 .tls
將其修改為標準的def檔案格式,如下:
library export
exports
get_version_string @1
select_mode @2
執行第三步就可以匯出lib。
使用 def 檔案從 dll 匯出
module-definition (.def) files
windows下動態庫和linux下動態庫的區別。
基本機制差不多,比較奇怪的是為什麼linux下的動態庫*.so隱式鏈結的時候不需要符號表,而windows下的動態庫*.dll卻需要呢?
其實從檔案格式上來說就知道,dll是pe格式(portable executable);而so是elf格式(executable and linkable format)。顧名思義,就是由於檔案格式確定的。有興趣可以深入研究下二者的不同。
如何從dll檔案匯出對應的lib檔案
visual c 開發工具提供了兩個命令列工具,乙個是dumpbin.exe,另乙個是lib.exe。利用這兩個工具即可從dll匯出其對應的lib。1 在命令列執行 dumpbin exports yourdll.dll yourdll.def exports fn1 fn2 3 在命令列執行 li...
從dll檔案匯出對應的lib檔案
基本內容 visual c 開發工具提供了兩個命令列工具,乙個是dumpbin.exe,另乙個是lib.exe。利用這兩個工具即可從dll匯出其對應的lib。1 在命令列執行 dumpbin exports yourdll.dll yourdll.def 2 編輯 yourdll.def 檔案,使之...
從DLL匯出LIB檔案
q 從動態鏈結庫dll檔案匯出lib檔案 詳情 常見的還有libcurl庫含有.a檔案,沒有lib檔案。解決 使用virsual studio自帶工具dumpbin.exe和lib.exe進行處理即可得到lib檔案。步驟如下 1,首先檢查dump.exe所在目錄是否在計算機的 環境變數 path 裡...