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

时间:2010-04-05 04:22:02

标签: c++ dll linker static-libraries

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

6 个答案:

答案 0 :(得分:9)

很抱歉,但没有直接的办法。 DLL是完全链接的可执行格式文件,其中静态库是一起收集的单独目标文件的集合。通过一些工作,你可以将一个静态库转换为一个DLL,但反过来是非常重要的(温和地说)。

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

答案 5 :(得分:-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转换为dll是完全不可能的。