我最近在 Qt4-interest 邮件列表上关注了关于构建商业/专有应用程序并将 Qt4 静态链接到其中是否合法的讨论。虽然有一些未经证实的方法可以做到这一点(通过向客户提供目标文件和 Makefile 等),但这听起来毕竟不是一个好主意。
我的一个项目是使用 LGPL 许可的 Qt4 库,我将它们作为单独的 DLL/Dylibs/so 发送给我的客户,并在所有平台上使用简单的安装程序。虽然到目前为止效果很好,但我想优化 a) 通过仅包含我需要的内容来减少 Qt 库大小来优化安装程序的大小,b) 提高应用程序的启动/加载速度。
我自己熟悉 Qt 的编译,但是 Qt 有很多标志和开关。
现在我正在使用以下标志进行构建:
./configure \
-fast \
-opensource \
-qt-sql-sqlite \
-nomake demos examples \
-silent \
-no-qt3support \
-no-gif \
-plugin-sql-mysql \
-release \
-no-xmlpatterns \
-no-multimedia
我不完全确定以下标志具有哪些效果/影响:
-no-STL
-no-javascript-jit
-no-nis
-separate-debug-info
-no-openvg
-no-mitshm
还有什么我可以做的,例如,通过为编译器提供优化开关,或者从构建的 Qt 库中“剥离”未使用的函数以使其更小(这对于静态构建来说很容易)。我对此没有太多经验。
哦,顺便说一句,当动态链接到 Qt 时,我编译的应用程序大小约为 600 kb(未剥离)。我尝试了一下,发现静态链接时大小约为 4 MB;但这样我就不必再包含 40 MB 的 Qt 库了。
因此,将上述所有内容放入问题/请求中:
如果您在这个主题上比我更先进,您如何优化/部署您自己的应用程序并确保它们快速启动并且只包含所需的内容?
最佳答案
我能想到的有几件事:
- 使用可以进行良好大小优化的编译器/链接器组合。例如,MSVC 在这方面比 MinGW 更好。所有使用 MSVC 构建的 Qt 版本 DLL 总计约为 21 MB。使用 MinGW 构建,它们总共约为 41 MB。顺便问一下,您真的需要传送所有 DLL 吗?
- 使用 -ltcg(链接时代码生成)标志跨目标文件进行优化。
- 使用预处理器标志来排除部分 Qt 功能。例如:QT_NO_STL = -no-STL。
- 立即尝试 mmx/3d/sse2 标志
- 删除一些样式(-no-style-)
关于c++ - 构建优化的 Qt4 - "./configure"标志及其含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1807203/