c++ - 构建优化的 Qt4 - "./configure"标志及其含义

标签 c++ qt optimization deployment qt4

我最近在 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/

相关文章:

c++ - 为什么 main 的默认返回值为 0 而不是 EXIT_SUCCESS?

c++ - 为什么带有指针子对象的文字类类型的constexpr表达式不能是非类型模板参数

c++ - Qt安装不会复制文件

c++ - 在 qscrollbar 旁边添加小部件

c++ - 从插槽访问 qtableview qsqltablemodel

javascript - 针对给定问题的替代和优化解决方案

c++ - 在 OSx : ld: symbol(s) not found for architecture x86_64 上使用 CMake 构建 C++ 项目

c++ - 如何使用 vector 的 emplace_back 函数?

c++ - AVX2 的 _mm256_cmp_epi32_mask 的模拟

javascript - 优化 jQuery 代码 - 重复部分