我编写了一个名为helloworld.exe的程序,该程序依赖于a.dll。但我没有a.dll的源代码,它是一个动态链接库。我该如何将它转换为静态库,以便将其链接到helloworld.exe中?
我编写了一个名为helloworld.exe的程序,该程序依赖于a.dll。但我没有a.dll的源代码,它是一个动态链接库。我该如何将它转换为静态库,以便将其链接到helloworld.exe中?
抱歉,没有直接的方法可以做到这一点。DLL是一个完全链接的可执行格式文件,而静态库是由多个单独的目标文件组合而成。通过一些努力,您可以将静态库转换为DLL,但反过来做则非常困难(姑且这么说吧)。
不,这是可能的。例如,有一个称为dlltolib的工具可以实现。
set DUMPBIN="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\dumpbin.exe"
set LIBX="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\lib.exe"
set IN="\MyFolder\MyDll.dll"
set DEF="\MyFolder\MyDll.def"
set LIB="\MyFolder\MyDll.lib"
:: [1] run dumpbin
%DUMPBIN% /EXPORTS /NOLOGO /OUT:%DEF% %IN%
:: [2] edit .DEF file to look proper
:: [3] run LIB
%LIBX% /DEF:%DEF% /OUT:%LIB%
我对至少一个(据说很受欢迎的?)答案中缺乏理解感到非常震惊。
我从头开始编写了链接器,每一行代码都是我自己写的。我知道关于DLL的所有信息。
DLL包含比lib更多的信息,并且它确实包含lib包含的绝对所有内容。每一项都有。
要将dll转换为lib,您可以按照以下精心编写的文章中提供的简单步骤进行操作。
https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/
(我不是Adrian Henke,只是提供信息)
所描述的过程允许您直接从DLL创建一个库,而无需使用DEF文件。实际上,它甚至允许您从DLL创建DEF文件,因为DLL包含了所有这些信息。
我可以保证它完美地工作,因为我实际上在DLL上运行了完全相同的过程并检查了结果。库是正确的,并且将允许您进行链接。
哦,顺便说一下,将库转换为DLL是绝对、完全、彻底不可能的。