16

我正在使用 Qt 开源版本开发应用程序。由于我不想提供 Microsoft Visual Visual C(++) 可再发行组件,因此我想使用 Qt 的静态链接版本。Qt 许可信息表明,如果我想在我的应用程序中使用静态链接,我“应该”使用商业 Qt 许可证进行开发,尽管当我使用configure -static构建静态 Qt 库的命令时,命令提示符会询问我是否使用商业或Qt 的开源版本。

那么可以用开源版本构建 Qt 吗?我需要商业版才能使用静态链接吗?我不会出售应用程序。

4

2 回答 2

33

编辑 2016 年 4 月

实际上,我最近一直在深入阅读 LGPL,并询问了一些有关该主题的专家。事实证明,在封闭源代码应用程序中无法为 Qt 使用静态链接更多的是一种培养的传说,与现实无关。

LGPL 需要的是最终用户可以将应用程序重新链接到不同版本的库。使用动态链接是实现此目的的一种方法,但您可以轻松地提供目标文件,这样您就不必打开源代码并且仍然满足 LGPL 要求。

在 Qt 网站上有 2 个法律常见问题解答,但都没有直接说明您不能这样做。就像没有说你可以一样。但是,如果您这样做,至少有几个例子暗示了模糊的法律威胁。我认为对所有这些都有一个很好的解释——他们不能说你不能在不发表一个可能对他们产生负面法律影响的实际谎言的情况下做到这一点,他们愿意阻止这样做而不是鼓励它,因为它有可能迫使更多人购买商业许可证。

所以简而言之,是的,你可以,而且你绝对应该最近 Qt 已经成为一个活生生的部署地狱,加上 Qt 5.7 在静态构建中,QML 文件整齐地隐藏在可执行文件中,而不是放在文件系统中,供任何人篡改。只要确保:

  • 您的 Qt 构建仅包含模块,根据 LGPL 许可,没有 GPL
  • 您的应用程序的 about 部分提到它正在使用 Qt 并包含一个链接,您可以在其中下载应用程序的目标文件
  • 在您的应用程序中包含所有相应的许可证文件

最后,您的应用程序实际上必须是“可重新链接的”,也就是说,它必须能够使用提供必要功能的兼容库版本。这意味着如果您在构建之前对 Qt 进行了修改,您也必须以源代码的形式提供这些修改,但只提供对 Qt 的修改,而不是您的应用程序的源代码。

更新:

这是直接来自GNU FAQ的摘录:

为了遵守 LGPL(任何现有版本:v2、v2.1 或 v3):

(1) 如果您静态链接到 LGPL 的库,您还必须以对象(不一定是源)格式提供您的应用程序,以便用户有机会修改库并重新链接应用程序。

这说明得很清楚。


旧的原始答案:


只要您的应用程序是开源的并且您提供源代码,就可以静态构建 Qt。如果您想保持源代码关闭,您要么需要昂贵的商业许可证,要么需要使用动态链接。

顺便说一句,使用 Qt 的静态构建非常好,对于 Qt5,我得到大约 7-8 MB 的可执行文件,没有外部依赖项,这比您必须随动态链接的应用程序附带的 20+ MB 的附加 dll 好得多。

有关更多信息,您可以观看此视频:使用 Qt 开发时做出正确的许可证选择

总而言之,能做到吗?100% 是的。应该这样做吗?这取决于,出于个人/测试/学习目的,它是 100% 可以的,但是如果您计划分发生产级软件,无论是否商业化,开源与否,您最好先咨询律师。整个主题不必要地复杂,需要解释,因此与律师的咨询变得比昂贵的商业执照更昂贵。

于 2013-03-10T13:21:15.837 回答
-1

答案是肯定的,如果您愿意开源您的应用程序。

根据 Qt 项目自己对他们使用的许可证的解释,如果您动态链接到 Qt 库,您的应用程序可以是封闭源代码或开放的。但是,如果您静态链接,则您的应用程序受 LGPL 条款的约束。

Qt 项目使用的确切语言是这样的:

在动态链接的情况下,可以(但不是强制)保持应用程序源代码的专有,只要它是“使用库的工作” - 通常通过库的动态链接来实现。在库的静态链接的情况下,应用程序本身可能不再是“使用库的工作”,因此受 LGPL 约束。建议要么动态链接,要么在 LGPL 下向用户提供应用程序源代码。

(http://qt-project.org/legal.html)

其他一些答案中关于情况“完全不清楚”的建议是完全不真实的 - Qt 项目试图非常清楚在什么情况下允许使用 LGPL 许可证,静态链接就是其中之一只要应用程序也是 LGPL。


由于原始问题指定非商业(不一定是开源),因此提问者需要决定他们是否可以允许在 LGPL(或扩展的 GPL 下分发,因为上面的页面还说“LGPL 可以转换为 GNU General Public执照”)。

于 2015-02-27T18:26:49.673 回答