如何從dll檔案匯出對應的lib檔案

2022-05-28 01:57:12 字數 1858 閱讀 7299

近期由於不再使用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 裡...