我写了一个程序helloworld.exe;这取决于a.dll。我没有a.dll的源代码,这是一个动态的dll。如何将其更改为静态库,以便将其链接到helloworld.exe?
对不起,但没有直接的办法。 DLL是完全链接的可执行格式文件,其中静态库是一起收集的单独目标文件的集合。通过一些工作,您可以将静态库转换为DLL,但执行相反操作并非易事(温和地说)。
正如杰瑞所说,你不能直接做到。但是,您可以将程序打包成类似自解压RAR文件的程序,该文件包含作为单个EXE的一部分的DLL,它自动将EXE和相关的DLL提取到临时文件夹并启动主程序。
在Windows上,如果您有相应的def文件,则可以获取lib文件来运行程序。您可以使用visual studio的命令提示符窗口来获取lib文件。命令行如下:lib /def:XXX.def / machine:x64(或x86得到32位lib)/out:XXX.lib。您需要确保def文件和dll文件位于同一文件夹中,并且您已将目录更改为该文件夹。
错,可以这样做。例如,有一个名为dlltolib的工具可以做到这一点。
我同意Jerry的意见,如果是部署问题,你可以使用Nullsoft Scriptable Install System。
至少在一个(据说是受欢迎的?)答案中缺乏理解,我感到非常震惊。
我已经从头开始编写了一个链接器,每行代码。我知道有关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是完全,完全,完全不可能的。