4

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

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

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

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

4

1 回答 1

7

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

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

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

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

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

于 2013-01-23T15:31:33.197 回答