我写了一个程序helloworld.exe;这取决于a.dll。我没有a.dll的源代码,这是一个动态的dll。如何将其更改为静态库,以便将其链接到helloworld.exe?
答案 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是完全不可能的。