用LGPL Qt单EXE?

时间:2010-02-16 23:25:23

标签: qt lgpl

关于分发程序(没有Qt许可证),我对LGPL / GPL了解不多;如果我创建了一个程序,我可以静态地将库链接到exe,所以我有一个文件可以分发:

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

  • 当您需要为该计划付款时,您仍然可以静态链接吗?

2 个答案:

答案 0 :(得分:28)

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

具体来说,静态链接会创建一个可执行文件,它是LGPL代码的衍生版,因此您必须遵守LGPL的第6部分:

  

6)作为上述章节的例外,您也可以组合或链接   “使用图书馆的工作”   图书馆制作的作品包含   图书馆的一部分,和   根据条款分配该工作   您的选择,只要符合条款   允许修改工作   客户自己的使用和逆转   用于调试的工程   修改

     

你必须给出明显的通知   每个图书馆的工作副本   用在它和图书馆和   其使用受本许可证的约束。   您必须提供此副本   执照。如果在执行期间工作   显示版权声明,您必须   包括版权声明   其中的图书馆,以及一个   参考指导用户到   本许可证的副本。另外,你必须   做其中一件事:

     

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

     

b)使用合适的共享库机制进行链接   图书馆。一个合适的机制是一个   (1)在运行时使用的副本   图书馆已经出现在   用户的计算机系统,而不是   将库函数复制到   可执行文件,(2)将运行   正确使用修改后的版本   库,如果用户安装了一个,   只要修改后的版本是   接口兼容版本   这项工作是用。

     

c)以书面报价附上作品,至少有效   三年,给同一个用户   第6a小节规定的材料,   以上,收费不超过   执行此分配的成本。

     

d)如果通过提供复制访问权来分配作品   从指定的地方,报价   等效访问复制上面   指定的材料   地点。   e)验证用户是否已收到这些副本   材料或您已经拥有的材料   向该用户发送了一份副本。

     

对于可执行文件,所需的表单   “使用图书馆的工作”   必须包括任何数据和实用程序   复制的必要程序   可执行的。但是,作为一个   特殊例外,材料要   分发不需要包括任何东西   这是正常分布的(在   用来源或二进制形式)   主要组件(编译器,内核,   等等)的操作系统   可执行文件运行,除非   组件本身伴随着   可执行文件。

     

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

答案 1 :(得分:12)

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

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

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

您的产品是免费还是付款无关紧要。您可以销售GPL / LGPL产品。