12

在分发程序(没有 Qt 许可证)方面,我对 LGPL/GPL 了解不多;如果我制作了一个程序,我可以将库静态链接到 exe,这样我就有一个文件可以在以下情况下分发:

  • 该程序不需要任何费用,它只是被分发(封闭源代码或开源)?

  • 当您必须为程序付费时,您仍然可以静态链接吗?

4

2 回答 2

29

实际上,只要您满足一些非常具体的要求,LGPL 就允许静态链接。例如,如果所有分发都是从您拥有StaticProgram.exe的网站完成的,那么只要用户还可以下载StaticProgram.objLGPL-library-source.tar.gz就可以了。您还可以通过书面提议分发StaticProgram.exe,以提供其他文件。

具体来说,静态链接会创建一个作为 LGPL 代码派生的可执行文件,因此您必须遵守 LGPL 的第 6 节:

6) 作为上述部分的例外,您还可以将“使用图书馆的作品”与图书馆结合或链接,以制作包含图书馆部分的作品,并根据您选择的条款分发该作品,前提是条款允许对工作进行修改以供客户自己使用,并允许进行逆向工程以调试此类修改。

您必须在每份作品的副本中显眼地声明其中使用了库,并且本许可涵盖了库及其使用。您必须提供本许可证的副本。如果执行期间的作品显示版权声明,您必须在其中包含库的版权声明,以及将用户引导至本许可副本的参考。此外,您必须执行以下操作之一:

a) 将作品与图书馆的完整相应机器可读源代码一起提供,包括作品中使用的任何更改(必须根据上述第 1 节和第 2 节分发);并且,如果作品是与图书馆链接的可执行文件,则将完整的机器可读“使用图书馆的作品”作为目标代码和/或源代码,以便用户可以修改图书馆,然后重新链接以生成包含修改后的库的修改后的可执行文件。(据了解,更改库中定义文件内容的用户不一定能够重新编译应用程序以使用修改后的定义。)

b) 使用合适的共享库机制与库链接。一种合适的机制是(1)在运行时使用用户计算机系统上已经存在的库的副本,而不是将库函数复制到可执行文件中,并且(2)将使用库的修改版本正常运行,如果用户安装了一个,只要修改后的版本与制作作品的版本界面兼容。

c) 为作品附上至少三年有效的书面报价,向同一用户提供上述第 6a 小节中指定的材料,收费不超过执行此分发的成本。

d) 如果通过提供从指定地点获取副本的方式分发作品,则提供从同一地点复制上述指定材料的同等访问权限。e) 确认用户已经收到这些材料的副本,或者您已经向该用户发送了副本。

对于可执行文件,“使用库的作品”的所需形式必须包括从其中复制可执行文件所需的任何数据和实用程序。但是,作为一个特殊的例外,要分发的材料不需要包括任何与运行可执行文件的操作系统的主要组件(编译器、内核等)一起正常分发的内容(以源代码或二进制形式) , 除非该组件本身附带可执行文件。

此要求可能会与通常不伴随操作系统的其他专有库的许可限制相矛盾。这种矛盾意味着您不能在分发的可执行文件中同时使用它们和库。

于 2010-02-16T23:56:17.343 回答
13

不,如果您的程序是封闭源代码并且您想链接到 Qt 的 LGPL 版本,您必须使用动态链接。如果要静态链接,则必须购买 Qt 许可证。

要在您的闭源项目中使用 LGPL 代码,用户必须能够替换代码的 lgpl 部分。最简单也是迄今为止最常见的方法是将所有 LGPL 代码放在一个 dll 中,然后用户可以选择替换 dll。

您还可以使用您的语言允许的任何技术手段来实现相同的目标。您可以分发目标文件,然后用户可以重新链接,正如其他评论者指出的那样,但我在实践中从未见过这样做。

您的产品是免费还是付费都没有关系。您可以销售 GPL/LGPL 产品。

于 2010-02-16T23:33:41.350 回答