如何精简Qt库以删除应用程序不使用的内容?

4
我正在发布一个带有Qt库的独立Linux应用程序。
是否有一种工具可以扫描我的源代码,查看我的应用程序使用哪些类/方法,然后从Qt源代码中删除不必要/未使用的内容,并编译适合我的应用程序的Qt库,而不会增加任何额外的负担?当然,这是最理想的情况。但是,现有的最接近的解决方案是什么,可以让我的Linux独立应用程序尽可能地精简并编译进Qt库?

一个关于消除死代码的相关问题,虽然不是特别针对Qt:我怎样才能知道哪些代码部分从未被使用过? - tanius
3个回答

8
有没有一种工具可以扫描我的源代码,查看我的应用程序使用哪些类/方法,然后从Qt源代码中拔掉不必要/未使用的内容,并编译适合我的应用程序的Qt库,而不会有任何额外的膨胀? 链接器已经为您做到了这一点。 如果您在静态链接到Qt库,则仅嵌入您调用的函数的代码到可执行文件中。
您不需要外部软件来完成此操作。Qt库在开发机上的大小并不重要。

1
并非完全正确。没有任何工具,甚至包括链接器,可以百分之百地检测到某些插件是否被使用,例如PNG或JPEG加载器。您必须检查已加载的文件名。链接器甚至不会尝试。 - MSalters

1

如果想要进一步减小程序的大小,请尝试使用UPX - 它可以使您的应用程序更小。


太棒了!效果比我预期的要好得多:“UPX通常可以将程序和DLL文件的文件大小减少约50%-70%”(来自UPX Github README - tanius

0
什么是最接近现有解决方案来尽可能减小我Linux独立应用程序中编译的Qt库大小的方法?
特别是对于Qt,自2019年初以来,有构建过程配置选项-ltcg以启用链接时代码生成。根据Qt公司的博客所述,它允许静态链接的Qt减少15%的大小,并且对于动态链接的Qt库也有较小但仍然明显的影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接