我最近接着讨论Qt4利益的邮件列表有关是否是合法的或不建立一个商业/专有应用程序和静态链接Qt4入它。虽然有一些非经证明的方式这样做(通过提供对象的文件和一个生成文件,等等。给客户),它听起来不像是个好主意,毕竟.

我的一个项目是利用LGPL许可Qt4图书馆和我的船他们作为单独的Dll/Dylibs/所以是我的顾客中,使用一个简单的安装在所有的平台。虽然这个工作很好迄今为止,我想要优化a)大小的安装通过减少夸脱库的大小,只包括我需要什么,b)增加启动/装载的速度我的应用程序。

我很熟悉汇编脱自己,但是,脱得到了大量的标志和开关。

我现在建立与以下标记:

./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

还有什么我可以做的,例如,通过提供优化开关于编译器,或"剥离"未使用的功能出建夸脱库,使它更小的(这将是简单的静态版).我没有太多的经验。

哦,只是作为一个侧面的注意,我的编制应用程序的尺寸大约600kb(非剥)的链接时,对脱的动态。我尝试用它发现它是围绕4MB当我静态链接;但那样我就不会包括40MB脱库了。

因此,要把上面的一切成一个问题/要求:

如果你是比我的关于这个主题,你如何优化部署自己的应用程序,并确保他们开始快速,只有含有需要的是什么?

有帮助吗?

解决方案

有几件事情,我可以认为:

  • 使用一个编译/连接组合,并很好的尺寸优化。MSVC要好得多,在这个比MinGW的实例。所有的脱释放Dll建立与MSVC总在-21MB。建立与MinGW他们总在-41MB。通过这种方式,做你 真的 需要船舶的所有Dll?
  • 使用的-ltcg(链接时代码生成的)标志以优化对象的文件。
  • 使用预处理器的标志,以排除的部分夸脱的功能。e.g:QT_NO_STL=-没有-stl。
  • 试试试试吧/3d/sse2标志
  • 删除的一些风格(-没有风格-)

其他提示

当你已经跳过所有模块这样的,你觉得你并不需要,然后你可以继续使用qconfig工具(一种隐藏在$把qtdir/工具/树)和删除个人类。只要小心的依赖关系-你可能需要一个迭代的几次获得夸脱建设(例如,QSpinBox取决于QValidator正本)。

当建设脱,特别是多次的-nomake标志是一个伟大的节省时间.试试-nomake实例-nomake演示。

另一种优于一般的速度在于,在使用编译器优化时编制夸脱,但你已经编辑了一些文件。当你摆脱svn,你结束了一个qtbase/dir。第一个你执行的配置脚本,它建立qmake

注: 你可以修改Makefile。win32或Makefile。unix和加线路,如:

QMAKE_CXXFLAGS_RELEASE = -CompilerDependentOptimizerSwitches 

如果你想qmake加以优化,但我认为这不是真的有必要,考虑到运行时间qmake可能0.0000001%的整个编译时间用于一个中型应用程序。

真的 优化来当编辑的mkspecs,用于建造噪声。

例如,在windows与VS2012,你可能会修改 qtbase/mkspecs/win32-msvc2012/qmake.conf.

前。:在默认Qt5.1,msvc2012mkspec读取:

QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE

因为你想要优化大小,可以将其替换为:

QMAKE_CFLAGS_RELEASE    = -O1 -MD

(根据 http://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx )

有时候,包括更高级别mkspecs发现 qtbase/mkspecs/common/ dir。

我成功地编制Qt5.1关于Debian/g++4.8.1与 -O3 -march=native (默认是 -O2)如果提供的任何人。

这样做之后,只是行使上脱git根,和去有啤酒和你的团队,因为即使在一个良好的计算机,它会采取年龄(约。2h在i7,没有建立demos/实例,但与其).

sed -i 's@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD -march=native@g'  qtbase/mkspecs/common/linux.conf

将优化Qt5.8在Linux上

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top