是否可以使用压缩的dll?

时间:2013-01-23 12:59:02

标签: windows dll dynamic-linking upx

我真的缺乏在Windows上开发东西的经验,我可能错过了一些显而易见的事情,试着保持冷静:)

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

我的印象是我做错了但它只是偶然的,所以我想确定,使用压缩的dll是否可以?或者我应该在任何时候期待不可预测的问题? (这是主要问题

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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