QT的三种协议说明 您所在的位置:网站首页 boost开源协议 QT的三种协议说明

QT的三种协议说明

2023-04-07 18:34| 来源: 网络整理| 查看: 265

QT

的三种协议说明

关于

Qt

的三种协议以及是否收费,有以下引⽂:

引⽂⼀:

    

最近⼀直在学习

 Qt

Qt 

有两个许可证:

LGPL 

和商业协议。这两个协议在现在的

 Qt 

版本中的代码是完全⼀致的(潜在含义是,

Qt 

的早期

版本,商业版的

 Qt 

通常包含有⼀些开源版本所没有的库,⽐如

 QtSingleApplication 

这个库)。所以现在对于普通开发⼈员和部分商业公司

来说,使⽤

 LGPL 

版本的

 Qt 

可以节省很⼤的开销。这两个版本最⼤的区别在于,前者是免费的,后者是收费的。既然代码都是⼀致的,所

以费⽤就要是⽤来购买

 Qt 

的售后服务和培训等等相关服务。

 

    

现在我们是来说⼀下版权的问题。

LGPL 

是⼀个开源协议,因此,有⼈会担⼼

 LGPL 

能否⽤于开发闭源程序,能够拿来卖钱。尽管现在国

内有些公司不是很重视这⽅⾯的问题,不过,如果你违反了协议,某⼀天被别⼈发来⼀纸律师函的时候,真的是欲哭⽆泪了哦。所以,我们

还是先来研究⼀下这个协议,

LGPL 

究竟能不能⽤于开发闭源程序。

    

以下内容是我查找了

 N 

多⽹站总结出来的,因为⾖⼦不是律师,所以

 LGPL 

协议基本看不懂。究竟怎样去理解这个协议,还是希望能够

有专业⼈⼠说出来。这⾥就算做是⼀种抛砖引⽟吧!尽管没有⼗分的确定,但是这⾥所说的理解基本也是⼋九不离⼗的了。

    

⾄于什么是

 LGPL 

协议,这⾥就不再多说了,我们关⼼的是,如果使⽤

 LGPL 

协议开发商业程序。请注意,这⾥所说的闭源程序,是指不

以某种形式开放源代码,也就是说,⽤户(包括其他开发者)不能获取其源代码的程序。⾸先说明⼀点,

LGPL

协议是⼀个商业友好的协

议。这⾥的含义是,你可以⽤

 LGPL

协议开发商业程序,当然也可以是⾮商业的闭源程序。但是,它是有⼀些限制的。这就是我们要讨论的

重点。

    

既然我们已经对其定性,那么我们直接进⼊主题:使⽤

 LGPL 

协议开发闭源程序,如果你使⽤动态链接的形式,那么,你可以以任何形式

发布你的应⽤程序,商业的、⾮商业的、开源的、⾮开源的,随你。如果你因某种原因必须静态链接⼀个基于

 LGPL 

协议发布的库(⼀下我

们简称为

 LGPL 

库),那么,你有义务进⾏下⾯的⼯作:

1.

你必须在你的⽂档中说明,你的程序中使⽤了

 LGPL 

库,并且说明这个库是基于

 LGPL 

发布的;

2.

你必须在你的应⽤程序发布中包含⼀份

 LGPL

协议,通常就是那个⽂本⽂件;

3.

你必须开放使⽤了

 LGPL 

库代码的所有代码,例如某些封装器。但是,其他使⽤这些封装器的代码就不需要开放了;

4.

你必须包含你的应⽤程序的余下部分的⽬标⽂件(通常就是我们所说的

 .o 

等等),或者是其他等价的⽂件。源代码并不是必须的。

    

是不是很难理解呢?我们详细的说⼀下。

    

第⼀条很容易理解;第⼆条也很容易理解,你可以在找到

 LGPL 

协议的内容,复制下来随你的程序⼀起发布就可以了。第三条就不那么好

理解了。简单来说,

LGPL

协议要求,如果你的类使⽤了

LGPL

库的代码,那么必须把这个类开源。例如,如果你的程序

 app.exe 

每个源⽂件

都使⽤了

 LGPL 

库的代码,那么你的所有源代码都要开源。为了避免这种情况,我们通常编写⼀个封装器,把

 LGPL

库的代码封装起来,这

样就只需要开放这个封装器的代码,⽽其他使⽤了这个封装器的代码就不需要开放。第四条是对第三条的⼀种补充:那些使⽤了封装器的程

序不需要开源,但是你必须把你编译的那些中间⽂件开放出来,

Windows 

下就是那些

 .o 

⽂件。

    

你很奇怪,为什么

 LGPL

协议要这样规定呢?

LGPL 

所做的⼯作是,它保证了⽤户能够有这样⼀种能⼒:修改你使⽤

 LGPL 

库函数的⽅式

(那些封装器就是你使⽤

 LGPL

库的⽅式,那些已经开源了),重新编译这些代码,然后重新对程序进⾏连接(连接所需要的⽬标⽂件也是

包含了的,这是第四条规定的),就可以得到⼀个新的可执⾏程序。

    

好了,如果你还不明⽩如何使⽤,我们来看⼀个例⼦。

    

假设我们使⽤⼀个名为

 Lib 

的库,这个库是基于

 LGPL

协议发布的。如果你使⽤

 Lib.dll 

做动态链接(

Windows 

下),好,⼀切

 OK

。⽆论

你的程序怎么样,你都可以做你所做的事情。

    

我们主要是来看,如果你要使⽤静态链接,那么你需要如何组织你的代码。如果你有⼀个

 main.cpp

(我们假设所有

 Lib 

库的函数都是⽤了

lib_ 

前缀):

// main.cpp int main() 

{     

    lib_init();     

    lib_do_something();     

    lib_done();     

    lib_close();      

    return 0; 

    

现在你已经完成了

 main.cpp

,但是你必须把它开源!因为它使⽤了

 LGPL 

库的代码。这是上⾯第三条规定的。我不想把它开源,怎么办

呢?好,我们建⼀个新的⽂件

 lib_wrapper.cpp:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有