如何将动态DLL转换为静态库?

问题描述 投票:15回答:6

我写了一个程序helloworld.exe;这取决于a.dll。我没有a.dll的源代码,这是一个动态的dll。如何将其更改为静态库,以便将其链接到helloworld.exe?

c++ dll linker static-libraries
6个回答
9
投票

对不起,但没有直接的办法。 DLL是完全链接的可执行格式文件,其中静态库是一起收集的单独目标文件的集合。通过一些工作,您可以将静态库转换为DLL,但执行相反操作并非易事(温和地说)。


5
投票

正如杰瑞所说,你不能直接做到。但是,您可以将程序打包成类似自解压RAR文件的程序,该文件包含作为单个EXE的一部分的DLL,它自动将EXE和相关的DLL提取到临时文件夹并启动主程序。


2
投票

在Windows上,如果您有相应的def文件,则可以获取lib文件来运行程序。您可以使用visual studio的命令提示符窗口来获取lib文件。命令行如下:lib /def:XXX.def / machine:x64(或x86得到32位lib)/out:XXX.lib。您需要确保def文件和dll文件位于同一文件夹中,并且您已将目录更改为该文件夹。


2
投票

错,可以这样做。例如,有一个名为dlltolib的工具可以做到这一点。


0
投票

我同意Jerry的意见,如果是部署问题,你可以使用Nullsoft Scriptable Install System


-2
投票

至少在一个(据说是受欢迎的?)答案中缺乏理解,我感到非常震惊。

我已经从头开始编写了一个链接器,每行代码。我知道有关DLL的所有信息。

DLL包含的信息远远多于lib,它确实包含了lib所包含的所有内容。最后一项。

要将dll转换为lib,可以按照以下编写良好的文章中提供的简单步骤进行操作。

https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/

(我不是adrian henke,仅供参考)

所描述的过程允许您直接从dll创建lib,而无需def文件。实际上,它实际上允许您从dll创建def文件,因为dll包含所有这些信息。

我可以保证它完美运行,因为我实际上在dll上运行完全相同的过程并检查结果。 lib是正确的,并允许您链接。

哦,顺便说一下,将lib转换为dll是完全,完全,完全不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.