【发布时间】:2011-02-04 08:04:09
【问题描述】:
我写了一个程序helloworld.exe;它取决于 a.dll。我没有 a.dll 的源代码,它是一个动态 dll。如何将其更改为静态库,以便将其链接到 helloworld.exe?
【问题讨论】:
标签: c++ dll linker static-libraries
我写了一个程序helloworld.exe;它取决于 a.dll。我没有 a.dll 的源代码,它是一个动态 dll。如何将其更改为静态库,以便将其链接到 helloworld.exe?
【问题讨论】:
标签: c++ dll linker static-libraries
抱歉,没有直接的方法可以这样做。 DLL 是完全链接的可执行格式文件,其中静态库是收集在一起的单独对象文件的集合。通过一些工作,您可以将静态库转换为 DLL,但反向操作并非易事(委婉地说)。
【讨论】:
正如 Jerry 所说,你不能直接这样做。但是,您可以将您的程序打包成类似于自解压 RAR 文件的文件,该文件将 DLL 作为单个 EXE 的一部分包含在内,它会自动将 EXE 和关联的 DLL 解压缩到临时文件夹并启动主程序。
【讨论】:
错,可以这样做。例如有一个名为dlltolib 的工具可以做到这一点。
【讨论】:
我同意 Jerry 的观点,如果是部署问题,您可以使用Nullsoft Scriptable Install System。
【讨论】:
在windows上,如果你有相应的def文件,你可以得到lib文件来运行你的程序。您可以使用 Visual Studio 的命令提示符窗口来获取 lib 文件。命令行如下:lib /def:XXX.def /machine:x64(或x86获取32bit lib)/out:XXX.lib。您需要确保def文件和dll文件在同一个文件夹中,并且您已将目录更改为该文件夹。
【讨论】:
我对至少有一个(据说很受欢迎?)答案缺乏理解感到非常震惊。
我已经从头开始编写了一个链接器,每一行代码。我知道关于 DLL 的一切。
DLL 包含的信息比 lib 多得多,而且可以保证,它绝对包含 lib 包含的所有内容。每最后一项。
要将 dll 转换为 lib,您可以按照以下精心编写的文章中提供的简单步骤进行操作。
https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/
(我不是阿德里安·亨克,仅供参考)
所描述的过程允许您直接从 dll 创建一个库,而不需要 def 文件。事实上,它实际上允许您从 dll 创建 def 文件,因为 dll 包含所有这些信息。
我可以保证它可以完美运行,因为我实际上在 dll 上运行了完全相同的进程并检查了结果。该库是正确的,并且允许您链接。
哦,顺便说一句,将 lib 转换为 dll 是完全、完全、完全不可能的。
【讨论】: