使用DLL的优缺点是什么?

使用DLL的优缺点是什么?,dll,shared-libraries,Dll,Shared Libraries,Windows仍然使用DLL,Mac程序似乎根本不使用DLL。使用这两种技术有好处还是缺点 如果一个程序安装包含它所需的所有DLL,以便它能100%正常工作,那么它是否与静态链接所有库相同?MacOS X与其他风格的Unix一样,使用共享库,这只是DLL的另一种形式 是的,两者都是有利的,因为DLL或共享库代码可以在多个进程之间共享。它是通过操作系统加载DLL或共享库并将其映射到使用它的进程的虚拟地址空间来实现的。在Windows上,您必须使用动态加载的库,因为GDI和用户库只能作为DLL提供。

Windows仍然使用DLL,Mac程序似乎根本不使用DLL。使用这两种技术有好处还是缺点


如果一个程序安装包含它所需的所有DLL,以便它能100%正常工作,那么它是否与静态链接所有库相同?

MacOS X与其他风格的Unix一样,使用共享库,这只是DLL的另一种形式


是的,两者都是有利的,因为DLL或共享库代码可以在多个进程之间共享。它是通过操作系统加载DLL或共享库并将其映射到使用它的进程的虚拟地址空间来实现的。

在Windows上,您必须使用动态加载的库,因为GDI和用户库只能作为DLL提供。您不能使用不涉及动态加载的协议链接中的任何一个或与之交谈

在其他操作系统上,您希望对复杂的应用程序使用动态加载,否则您的二进制文件将毫无理由地膨胀,并且从长远来看,您的应用程序可能与系统不兼容(然而,短期来看,静态链接可以在某种程度上保护您免受库中微小的破坏性更改)。你不能在依赖它们的操作系统上链接专有库

Windows仍然使用DLL和Mac 程序似乎根本不使用DLL。 它们对我们的工作是有利还是不利 使用哪种技术

任何一种模块化都是好的,因为它使软件更新更容易,也就是说,如果程序中的错误被修复,您不必更新整个程序二进制文件。如果错误出现在某个dll中,则只需更新该dll

唯一的缺点是,在程序的开发中引入了另一个复杂性,例如,如果DLL是C或C++ DLL,不同的调用约定等

如果程序安装包括所有 它所需要的DLL,会是 与静态链接所有 图书馆


或多或少是的。取决于您是否在假定静态链接的dll中调用函数。dll也可以是一个“独立”的动态库,您只能通过LoadLibrary()和GetProcAddress()等进行访问。

共享库的一大优势(Windows上的dll或Unix上的.so)您可以分别重建库及其使用者,而使用静态库时,您必须重建库,然后重新链接所有使用者,这在Unix系统上速度很慢,在Windows上速度不是很快。

MacOS软件也使用“dll”,它们只是名称不同(共享库)。
如果您想在软件的不同组件中重用代码,则Dll是有意义的。大多数情况下,这在大型软件项目中是有意义的。
当不需要代码重用时,静态链接对于小型单组件应用程序是有意义的。它简化了分发,因为您的组件没有外部依赖项。

是的,请参见:

动态链接具有以下功能 优点:
节省内存和时间 减少交换。许多过程可以 同时使用单个DLL, 在中共享DLL的单个副本 记忆。相反,Windows必须加载 将库代码复制到内存中 对于构建的每个应用程序 使用静态链接库。
保存 磁盘空间。许多应用程序可以 在上共享DLL的单个副本 磁盘。相反,每个应用程序 使用静态链接库构建的 链接到其上的库代码 可执行映像作为单独的 复制。
对DLL的升级是 更容易的。当DLL中的函数 改变,使用它们的应用程序 不需要重新编译或 只要函数 参数和返回值不匹配 改变相反,静态链接 目标代码要求 当 功能改变。
提供 售后市场支持。例如,一个 显示驱动程序DLL可以修改为 支持未显示的显示 应用程序启动时可用 已发货。
支持多语言 程序。用计算机编写的程序 不同的编程语言可以 调用相同的DLL函数,只要 程序遵循函数的 电话会议。节目和 DLL函数必须在中兼容 以下方式:按 函数希望其参数 是否被推到堆栈上 函数或应用程序正在运行 负责清理烟囱, 以及是否传递了任何参数 在寄存器中。
提供了一种机制 扩展MFC库类。你 可以从现有的 MFC类并将它们放置在MFC中 MFC使用的扩展DLL 应用程序。
简化了创建过程 国际版本。通过放置 在DLL中的资源,这要容易得多 创建国际版本的 应用你可以把绳子放好 对于每个语言版本的 应用程序位于单独的资源DLL中 有不同的语言 版本加载相应的 资源。
潜力 使用DLL的缺点是 应用程序不是独立的;信息技术 取决于是否存在一个单独的 DLL模块。


除了内存/磁盘空间使用外,使用共享库的另一个重要优点是,系统上使用库的所有程序都会自动获取库的更新

当InfoZIP库中存在安全漏洞时,对DLL/的更新会自动使所有使用这些库的软件安全。静态链接的软件必须重新编译

Windows仍然使用DLL,Mac程序似乎根本不使用DLL。使用这两种技术的好处还是坏处

两者都使用共享库,只是使用了不同的名称

如果程序安装包含所有DLL