有没有与Qt相媲美的替代品?

10

我喜欢Qt的理念,但我不仅用它进行开源开发,还用它进行闭源开发。这不是一个真正的问题,因为我只需在LGPL下授权并分发所需的DLL文件。但不幸的是,我遇到了一个问题。

编译成静态链接的可执行文件大小为4.36 MB。还算可以接受。

编译成动态链接的可执行文件大小为250 KB,但我还必须包括近35 MB的DLL文件在安装包中。这真的很糟糕,无论我如何看待它,我都无法证明其大小使用比合理。而且我根本负担不起商业许可证费用。谈论对初创开发者的价格割裂。

无论如何,你看到我的问题了。我的程序只执行一个功能。35MB太大了。不幸的是,我听说WxWidgets维护得非常糟糕,但考虑到我的情况,我担心我将被迫使用它。有人能推荐我一种替代方案吗?它几乎同样强大,但不会导致LGPL编译的Qt可执行文件膨胀吗?谢谢!


3
你使用Qt做什么?只是GUI吗?你不能只将需要的部分与应用程序一起打包吗?如果你不使用Qt的每个部分,就不必全部打包Qt。查找可执行文件真正依赖的DLL文件。 - Juraj Blaho
1
这是问题。那些dll是必需的,例如QtCore4、QtGUI等。编译后的Hello World可执行文件仅依赖dll就已经占用了30 MB的空间 :/. - Dr.McNinja
1
你的程序正在执行哪个“核心函数”?在不涉及Qt的情况下,可能有平台无关的替代功能。 - liaK
1
即使我在Qt构建中选择了所有Qt DLL(包括Phonon和WebKit),我也只能获得不到35MB的大小。你的应用程序在做什么,你确定你需要所有的DLL吗? - Bart
可能是因为我使用了SDK而不是使用DLL自己编译的原因吗?我实际上使用了尽可能多的优化命令编译了静态可执行文件。 - Dr.McNinja
显示剩余2条评论
3个回答

6
为什么不将您需要的所有功能封装在一个单独的静态编译的dll中,并动态链接您的程序。您可以发布静态编译的dll的源代码,因为它只是一个包装器。总体上,您仍然符合LGPL。

我不是法律专家,所以当然你应该自己确认这是否属实。 - hawk
这实际上创建了一个由Qt的严格子集组成的新库,这是完全合法的。您只需要确保同时提供“您”的库的源代码和构建它所使用的Qt版本的源代码。LGPL的要求是最终用户能够用修改后的版本替换库,这将得到满足。 - Nicholas Knight
非常有趣的漏洞。所以,如果我理解正确,我会在一个单独的静态库中处理所有的Qt工作。这个文件直接链接到Qt,因此它属于LGPL,所以我必须在LGPL下发布它。问题是,因为我间接地链接到处理所有Qt工作的静态库,这是否意味着我仍然链接到Qt? - Dr.McNinja
@Dr.McNinja:你总是“链接”到Qt。Hawk的方法避免了直接通过“静态”链接将Qt合并到可执行文件中,这就是LGPL会让你陷入麻烦的地方。Hawk的建议只是一种快速便捷的方式,可以剥离掉你不需要的Qt部分,并使用其余部分构建一个新的“动态”库(DLL)。它在功能上与下载Qt源代码、剥离掉不需要的代码并将结果构建为DLL完全相同。只要你发布那个新的、更小的DLL的源代码,你就没问题了。 - Nicholas Knight

1

http://www.fltk.org/看看这个吧 :) 它更简单,开源,并且可能已经满足了你的需求。


0
我可以建议的一件事是尝试使用UPX(或类似工具)压缩动态链接库,以便根据DLL包含的代码和数据/资源数量来减小其大小,您可以获得相当惊人的结果。

例如:QtCore+QtGui 的大小从10 MB 减少到了 4.3 MB。虽然我个人认为增加的内存使用量不值得节省的磁盘空间。 - Baffe Boyois

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