我真的缺乏在 Windows 上开发东西的经验,我可能错过了一些明显的东西,尽量保持冷静:)
我有一个应用程序 (Qt C++),它使用自己路径中的一些 .dll
(我的意思是我将这些 .dll
与 .exe 一起交付) .当我交付应用程序时,我通过 upx 压缩 dll。 .它极大地压缩了它们,我可以在不解压缩的情况下使用那些 dll
。
我的印象是我做错了什么,但它只是偶然起作用,所以我想确定一下,使用压缩的 dll 是否可以?还是我应该随时预料到不可预知的问题? (这是主要问题)
如果 .dll
可以在压缩模式下使用,那么为什么我们首先要将它们解压缩。
最佳答案
这不是“偶然工作”的东西,UPX 旨在压缩 Win32-PE(和许多其他格式),无论是可执行文件还是 DLL。
至于“可以吗?”,是的,当然是“可以”,只要您不违反另一方的许可即可。 与 Qt 相关的任何事情都不太可能发生这种情况,但原则上,这是一种可能性。例如,可以使用一些具有许可条款的 DLL,例如“以二进制形式分发,等等等等,不允许修改”。比方说,类似于 MSVC 或 DirectX 可再发行组件,或者某些图形卡供应商的专有 API。在任何情况下,记住这一点并在冒着违反许可的风险之前检查许可都不是错误的。
问题的措辞“这还好吗?”略有不同:“这明智吗?”,答案是:可能不是。磁盘上额外的几兆字节通常无关紧要。当您将所有内容打包到安装程序中,并且用户通过互联网下载它时,数据无论如何都会被压缩,所以在这方面是一样的。
但是,无论您使用 UPX 或其他可执行打包程序,还是 Windows 的文件系统压缩,压缩都有副作用。它会导致额外的地址空间碎片,它会禁用异步传输,并且会丧失操作系统从工作集中丢弃 DLL 页面并在访问时从 PE 镜像透明地重新加载它们的能力。
最后一句话意味着操作系统必须在页面文件中进行分配,并且当您的进程的工作集移出时,它必须将页面写入页面文件为别的东西腾出空间。没有别的办法。现在,如果用户禁用了页面文件怎么办...
关于windows - 可以使用压缩的 dll 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14480326/