当前位置:编程学习 > wap >>

请教QT的Lisence和静态编译问题

写了一个windows应用,把dll都装进去发现有500M
请问使用静态编译是不是可以大幅减少应用的大小?

请问LGPL协议是不是只能用动态编译的Qt(载入dll)?在那里可以看到官方的说明?我在nokia网站上找了一圈都没看到有说LGPL不能静态编译的。 --------------------编程问答-------------------- 没有限制只使用动态库 --------------------编程问答-------------------- 但是我在这个论坛看到说LGPL协议只使用动态库 --------------------编程问答-------------------- 参考:http://qtcn.org/bbs/read.php?tid=1324

10、Qt 4 for X11 OpenSource版如何静态链接?
答:编译安装的时候加上-static选项
引用
./configure -static   //一定要加static选项
gmake
gmake install

然后,在Makefile文件中加 static 选项或者在.pro文件中加上QMAKE_LFLAGS += -static,就可以连接静态库了。
--------------------编程问答--------------------
引用 3 楼 piaopiaolanghua 的回复:
参考:http://qtcn.org/bbs/read.php?tid=1324

10、Qt 4 for X11 OpenSource版如何静态链接?
答:编译安装的时候加上-static选项
引用
./configure -static   //一定要加static选项
gmake
gmake install

然后,在Makefile文件中加 static 选项或者在.p……


在windows也可以采用OpenSource,是用嵌入Visual Studio的QT. --------------------编程问答-------------------- 首先qt的全部dll没有那么大,大概你是用的debug版本的了,发布时都是用release版的,用不到的dll也不用添加,最基本的就是qtcore,qtgui,再用点别的加起来这两个也就10来M
再说LGPL,虽然没有限制不能静态编译,但是静态编译带来的版权声明比较麻烦,不是IT专家兼律师估计都看不懂LGPL。所以最好是动态链接qt库,你的程序继续声明为LGPL或者闭源都可以。 --------------------编程问答-------------------- 静态编译用于商用是要收费的! --------------------编程问答--------------------
引用 5 楼 darkdong 的回复:
首先qt的全部dll没有那么大,大概你是用的debug版本的了,发布时都是用release版的,用不到的dll也不用添加,最基本的就是qtcore,qtgui,再用点别的加起来这两个也就10来M
再说LGPL,虽然没有限制不能静态编译,但是静态编译带来的版权声明比较麻烦,不是IT专家兼律师估计都看不懂LGPL。所以最好是动态链接qt库,你的程序继续声明为LGPL或者闭源都可以。

谢谢 ,我去试试看。 --------------------编程问答--------------------
引用 6 楼 mid__night 的回复:
静态编译用于商用是要收费的!


所以我想知道官方关于这一点的说明,希望能给个连接什么的。 --------------------编程问答-------------------- 没有收费这一说,除非你使用qt的商业版。
LGPL的库静态编译发布,怎么才是合法看起来很复杂,不过至少,你要提供链接到LGPL库的.o文件(静态编译产生的obj目标文件),还得引用LGPL的许可内容等等。所以说动态链接是最简单,明了,干净的。 --------------------编程问答-------------------- 我查了一下易做图,大意就是说,你可以开发商业软件,动态链接静态链接无所谓。软件所有权属于你。但有一个特例,就是Qt的分支部分必须开源,也就是说,你对Qt的修改,以及一些继承于Qt的自己的类(这个有待进一步确认),都要求被开源。如果你使用动态链接,大家都知道你没有改过Qt,判断相对简单一些。

下面附易做图原话:

Differences from the GPL

The main difference between the GPL and the LGPL is that the latter can be linked to (in the case of a library, 'used by') a non-(L)GPLed program, regardless of whether it is free software or proprietary software.[1] This non-(L)GPLed program can then be distributed under any chosen terms if it is not a derivative work. If it is a derivative work, then the terms must allow "modification for the customer's own use and reverse engineering for debugging such modifications." Whether a work that uses an LGPL program is a derivative work or not is a legal issue. A standalone executable that dynamically links to a library is generally accepted as not being a derivative work (in LGPL). It would be considered a "work that uses the library" and paragraph 5 of the LGPL applies.

    A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.

Essentially, if it is a "work that uses the library", then it must be possible for the software to be linked with a newer version of the LGPL-covered program. The most commonly used method for doing so is to use "a suitable shared library mechanism for linking". Alternatively, a statically linked library is allowed if either source code or linkable object files are provided.

One feature of the LGPL is that one can convert any LGPLed piece of software into a GPLed piece of software (section 3 of the license). This feature is useful for direct reuse of LGPLed code in GPLed libraries and applications, or if one wants to create a version of the code that cannot be used in proprietary software products.
--------------------编程问答-------------------- 我曾经查找很多资料看了一下,请看这里。
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,