Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt-single-EXE与LGPL?_Qt_Lgpl - Fatal编程技术网

Qt-single-EXE与LGPL?

Qt-single-EXE与LGPL?,qt,lgpl,Qt,Lgpl,我对LGPL/GPL在分发程序方面不太了解(没有Qt许可证);如果我制作了一个程序,我是否可以将库静态链接到exe,以便在以下情况下分发一个文件: 这个程序不需要花费任何费用,它只是被分发(封闭源代码还是开放源代码) 当你必须为程序付费时,你还能静态链接吗 否,如果您的程序是封闭源代码的,并且您希望链接到Qt的LGPL版本,则必须使用动态链接。如果您想静态链接,那么您必须购买Qt的许可证 要在封闭源代码项目中使用LGPL代码,用户必须能够替换代码的LGPL部分。最简单也是最常见的方法是将所有L

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

  • 这个程序不需要花费任何费用,它只是被分发(封闭源代码还是开放源代码)

  • 当你必须为程序付费时,你还能静态链接吗


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

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

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


不管你的产品是免费的还是付费的。您可以销售GPL/LGPL产品。

实际上,只要满足一些非常具体的要求,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) 验证用户是否已收到这些文件的副本 材料或您已经拥有的材料 已向此用户发送副本

对于可执行文件,是所需的表单 “使用图书馆的工作”的定义 必须包括任何数据和实用程序 复制所需的程序 可执行文件。但是作为一个 特殊例外情况下,材料应 分布式不需要包含任何内容 正态分布的 源或二进制形式)的 主要组件(编译器、内核、, 等等)上的操作系统 可执行文件运行的,除非 组件本身与 可执行文件

可能会出现这种情况 与许可证限制相矛盾 其他专有库的 正常情况下,不伴随操作系统 系统。这种矛盾意味着你 不能同时使用它们和库 一起在一个可执行文件中 分发


哦,好吧。谢谢你的回答。如果你也发布目标代码,你可以使用静态链接。阅读LGPL版本2.1第6节。这个答案不正确。我同意@Kevin的观点。我想你可能想检查并更正你的答案,或者再次向我们解释一下。我不明白这句话的意思:“如果你不想静态链接,那么你必须为QT购买一个许可证。”我认为这是错误的,让我们感到困惑的不仅仅是帮助。请原谅,如果我感觉像是在挑毛衣,但我对你的答案感到困惑。从Qt博客:用户可以开发动态链接到Qt库的专有应用程序,而无需发布其应用程序源代码。