使用windeployqt程序生成的库都很大,即使是一个空的程序。对比了一下程序,有些库根本就没有用到却也是打包进来了。本文提供一种剔除多余程序库以达到瘦身的方法。
当一个程序打开运行时候,如果是缺少了库,系统将会弹出对应库找不到的提示对话框。为什么会这样?因为程序运行前先会加载动态库部分到内存以供程序运行调用。
使用反向思维,我们同样地将程序运行起来,然后将程序目录下的库删除,如果能删除的就证明程序没有使用到该库,如果正在被程序使用的库是不能被删除的。利用这一特性可以将一部分库剔除。
当然,这一方法其实并不靠谱,不建议操作。我们需要学习的是反向操作的思维,编程有时候需要那么一点点的反式操作却是能在其中找到乐趣。一方面思维定性是学编程的最大优点,另一方面也是最大的缺点。反向操作在生活中常常能有奇效,比如倒立洗头,看似荒唐(想着这一场景却是有些好笑),但他能完美解决洗头需要闭上眼睛的问题。
正确方法
- 使用windows接口
CreateToolhelp32Snapshot
,它可以通过获取进程信息为指定的进程、进程堆、模块、线程建立一个快照。 - 同过获取进程调用的动态库从而进行准确的剔除多余的库。