2009-11-27 17 views
2

最近,我跟着它是否合法或不建商业/专有应用了Qt4-interest邮件列表上的讨论和静态链接的Qt4进去。虽然有一些未经证实的方式(通过向客户提供目标文件和Makefile等),但这听起来不像是一个好主意。大厦优化的Qt4 - “的./configure”标志及其含义

我的一个项目使用LGPL许可的Qt4库和我船它们作为单独的DLL/Dylibs /这样对我的客户,使用所有平台上的一个简单的安装。虽然这个作品不错,到目前为止,我想通过只包括我需要什么,二)增加我的应用程序的启动/加载减速Qt库的大小,以优化)的安装程序的大小。

我熟悉编译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库,使之更小(这对静态构建来说很容易)。我没有太多的经验。

哦,只是作为一个侧面说明,我的编译的应用程序大小约为600 KB(未剥离的)对Qt的动态链接时。我对它进行了实验,发现静态链接时其大小约为4 MB;但这样我就不必再包含40 MB的Qt库了。

所以,把一切都入一个问题/请求:

如果你比我更先进的关于这个主题,你怎么优化/部署自己的应用程序,并确保他们启动速度快,只包含需要什么?

回答

2

有迹象表明,我能想到的几件事情:

  • 使用编译器/连接组合,做良好的尺寸优化。 MSVC比MinGW好得多。所有使用MSVC构建的Qt发行版DLL总计约为21 MB。用MinGW构建它们的总计为41 MB。顺便说一下,你真的需要所有的DLL?
  • 使用-ltcg(链接时间代码生成)标志优化跨目标文件。
  • 使用预处理器标志来排除部分Qt功能。例如:QT_NO_STL = -no-stl。
  • 现在尝试的MMX/3D/SSE2标志
  • 除去一些样式(-no-风格 - )
+0

感谢您的答复! 其实,我只是运送需要的东西,包括QtCore,QtGui,QtWebKit,QtXml,QtSql和QtNetwork。 我使用'-no-stl'时有什么问题?我会尽力了解更多关于链接时间代码生成的内容,因为这似乎很有趣。另外排除一些样式是一个非常好的主意,因为我只是在OS X/Windows上使用本机样式。 – BastiBen 2009-11-27 08:58:51

+1

您将失去QString和basic_string之间以及QTL容器和STL容器之间的转换函数。 – rpg 2009-11-27 12:51:05

+0

感谢您解决这个问题。我不记得在任何地方使用过STL类/类型。通常Qt的东西对我来说工作得很好。 :) – BastiBen 2009-11-28 11:43:53

2

当你跳过所有模块等,你觉得你并不需要,那么你可以继续使用qconfig工具(隐藏在$ QTDIR/tools/tree中)并删除单个类。只要注意依赖关系 - 您可能需要迭代几次来获取Qt才能构建(例如,QSpinBox取决于存在的QValidator)。

建立Qt时,特别是多次,-nomake标志是一个很好的定时器。尝试-nomake示例-nomake演示。

0

对于一般速度的另一个优化在于在编译Qt时使用编译器优化,但是你必须编辑一些文件。 当你从Git获得Qt时,你会得到一个qtbase/dir。 首先你执行配置脚本,它建立QMAKE

注:可以修改Makefile.win32或Makefile.unix并添加线,如:

QMAKE_CXXFLAGS_RELEASE = -CompilerDependentOptimizerSwitches 
如果你想qmake的进行优化

,但考虑到qmake的运行时间可能是整个中型应用程序编译时间的0.0000001%,我认为这不是必须的。

但是real优化来编辑用于构建Qt的mkspecs。

例如,在使用VS2012的窗口下,您可能会修改qtbase/mkspecs/win32-msvc2012/qmake.conf

Ex。 :在默认Qt5.1中,msvc2012 mkspec写着:

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

有时它包含在qtbase/mkspecs/common/ dir中找到的更多高级mkspec。

我成功地在Debian/g ++ 4.8.1上编译了Qt5.1,其中-O3 -march=native(默认为-O2),如果它服务于任何人。

做完这些之后,只需在QT git根目录下运行make,然后去与你的团队一起喝啤酒,因为即使在一台好的计算机上,它也需要很长时间(在i7上大概需要2小时,而没有构建演示/例子,但与webkit)。