我有一个可移植的exe应用程序,它与dll文件一起分发在一个目录中。我知道它肯定不会使用提供的库中的所有功能。有没有可用的工具来消除未使用的功能并减小Q4312079Q的尺寸?

评论

该DLL是否仅由一个可执行文件使用,并且确定将来将要安装的另一个程序不会调用该DLL吗?请注意,某些程序构造方法会动态调用,在这种情况下,删除函数存在风险:stackoverflow.com/a/9957210/226958

@NicolasRaoul我敢肯定,这些DLL将仅由一个可执行文件使用,因为正如我所说,它们是与exe一起分发在一个文件夹中的,而不是在整个系统范围内安装的。至于风险,感谢您提供信息,不过我想尝试一下。

如果您的目标仅仅是减小DLL的大小,则UPX是另一种解决方案。它可以缩小EXE和DLL。可悲的是,使用UPX会增加在防病毒产品中触发误报的可能性。

#1 楼

假设您有权访问源代码和工具集以构建原始DDL(删除功能的最安全方法),我建议执行以下步骤:


将原始DLL保存在安全的地方。
找到DLL的源代码。
自己构建DLL并用它测试程序,以确保所有程序都可以运行。
从DLL生成过程中删除除您所知之外的所有内容。
再次尝试构建DLL,并且程序使用已更新的导入功能,可能会mo吟抱怨丢失的项目,将这些项目重新添加到所有项目都生成为止。
再次进行彻底测试-失败时诊断丢失的内容,然后重新添加。-重复直到满意。

我会认真考虑在阶段3重命名DLL,并使用新名称保留该DLL,以避免发生冲突的可能性。 br />