【问题标题】:is it OK to use compressed dll(s)?可以使用压缩的 dll 吗?
【发布时间】:2013-01-23 12:59:02
【问题描述】:

我真的缺乏在Windows上开发东西的经验,我可能错过了一些明显的东西,尽量保持冷静:)

我有一个应用程序 (Qt C++),它使用自己路径中的一些 .dlls(我的意思是我将这些 .dlls 与 .exe 一起提供)。当我交付应用程序时,我通过upx 压缩 dll。它极大地压缩了它们,我可以在不解压缩的情况下使用那些dlls。

我的印象是我做错了什么,但它只是偶然起作用,所以我想确定一下,使用压缩的 dll 可以吗?还是我应该随时预料到不可预测的问题? (这是主要问题

如果.dlls 可以在压缩模式下使用,那么为什么我们首先要将它们未压缩。

【问题讨论】:

  • Windows 本身不支持压缩的 DLL。如果您有问题,则必须与 UPX 制造商联系。为什么要首先压缩 dll?你的程序这么大吗? (PS:Windows可以配置压缩目录)。
  • 实际上我的程序很小,但它所依赖的 dll 很大,所以用户不想为一个小工具下载 50mb...

标签: windows dll dynamic-linking upx


【解决方案1】:

这不是“偶然”的东西,UPX 旨在压缩 Win32-PE(和许多其他格式),无论是可执行文件还是 DLL。

至于“可以吗?”,嗯,是的,当然可以,只要不违反他人的许可即可。 与 Qt 相关的任何事情都不太可能发生这种情况,但原则上是有可能的。例如,一个可以使用一些具有许可条款的 DLL,例如“以二进制形式分发,等等等等,不允许修改”。比如说,像 MSVC 或 DirectX 可再发行组件,或某些显卡供应商的专有 API。在任何情况下,牢记这一点并在有违反它们的风险之前检查许可证并不是一个错误。

措辞你的问题“这样好吗?”稍有不同:“这样明智吗?”,答案是:可能不是。磁盘上额外的几兆字节通常无关紧要。当您将所有内容打包到安装程序中,并且用户通过 Internet 下载它时,无论如何数据都会被压缩,因此在这方面是相同的。

但是,无论您使用 UPX 还是其他可执行打包程序,还是 Windows 的文件系统压缩,压缩都有副作用。它会导致额外的地址空间碎片,它禁用异步传输,并且它丧失了操作系统从工作集中丢弃来自 DLL 的页面以及在访问时从 PE 映像透明地重新加载它们的能力。

最后一句表示操作系统必须在页面文件中进行分配,并且当您的进程的工作集被移出时,它必须将页面写入页面文件为其他东西腾出空间。没有其他办法。现在如果用户禁用了页面文件怎么办...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多