C++ 是否可以在启用webkit的情况下构建静态Qt库?怎么做?
我尝试使用以下命令构建静态Qt库:C++ 是否可以在启用webkit的情况下构建静态Qt库?怎么做?,c++,qt,qt4,webkit,qtwebkit,C++,Qt,Qt4,Webkit,Qtwebkit,我尝试使用以下命令构建静态Qt库: ./configure --prefix=/usr/local/qt --static --accessibility --multimedia --audio-backend --svg --webkit --javascript-jit --script --scripttools --declarative --dbus --debug 但我收到一条信息说: WARNING: Using static linking will disable the
./configure --prefix=/usr/local/qt --static --accessibility --multimedia --audio-backend --svg --webkit --javascript-jit --script --scripttools --declarative --dbus --debug
但我收到一条信息说:
WARNING: Using static linking will disable the WebKit module.
在启用所有模块的情况下,是否可以构建静态Qt库?怎么做
谢谢可能是因为它的一部分是LGPL。因此,这可能是可能的,但LGPL意味着您必须提供源代码或已编译的目标代码,以便最终用户可以根据自己的版本重新链接 如果您没有将结果部署给任何人,那么您可能会这样做并遵守
不过,您必须编辑构建以实际执行它,因为它们在默认情况下似乎符合LGPL。好吧,Lou Franco是对的,使用LGPL和静态编译并不真正符合LGPL。大多数Qt“用户”或开发人员所做的是动态编译,在应用程序目录中为他们“自己编译”的库提供特权。这对于LGPL来说是可以的,只要您没有更改Qt/QtWebKit/WebKit本身中的任何代码,也没有向上游提供更改。与LGPL问题无关,因为您的应用程序可以是开源的,并以与LGPL兼容的方式获得许可 由于技术原因,显然不支持静态链接的WebKit。(一些编译器似乎对此不满意)。已在commit 4221d629e2cf37ee8c5ba7cb595b05ab8c82f113中更新生成脚本,以明确阻止它: 删除了对QtWebKit静态链接的支持。 Qt4.7不再支持WebKit的静态链接,因此此提交确保文档中提到了它,并且如果请求Qt的静态链接,configure将禁用WebKit
它可能与您的编译器一起工作,也可能与您的编译器不一起工作,但我怀疑Qt团队不想为所有官方支持的体系结构维护它而陷入麻烦。几乎不可能。Webkit使用独立的makefiles,而不是由配置工具生成的makefiles。您可以自己检查
src\3rdparty\webkit\source
如果您试图用webkit编译Qt static,您将遇到一个错误,即找不到-lwebcore。事实上,webcore.a是在src\3rdparty\webkit\source\webcore\release
生成的,-ljscore也是如此。但如果您将它们复制到/lib yourslef,链接错误总是会弹出
我试图编辑webcore和jscore的makefile,添加-static
,但根本不起作用
遗憾的是,这就是我现在得到的一切。对于Qt4.8.3,我必须修补.pro文件,以制作一个单独的QtWebKit,而不是单独的WebKit和JavaScriptCore库。链接器会混淆,因为两个库之间存在相互依赖关系 不确定类似的方法是否适用于Qt4.7.1 我不打算提及许可问题
diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
index d60533e..6a7ffa7 100644
--- a/mkspecs/common/linux.conf
+++ b/mkspecs/common/linux.conf
@@ -7,8 +7,8 @@ QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
QMAKE_INCDIR =
QMAKE_LIBDIR =
-QMAKE_INCDIR_X11 = /usr/X11R6/include
-QMAKE_LIBDIR_X11 = /usr/X11R6/lib
+QMAKE_INCDIR_X11 = /usr/include/X11
+QMAKE_LIBDIR_X11 = /usr/lib/X11
QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
QMAKE_INCDIR_OPENGL = /usr/X11R6/include
diff --git a/mkspecs/linux-g++-64/qmake.conf b/mkspecs/linux-g++-64/qmake.conf
index 222f6b7..3780295 100644
--- a/mkspecs/linux-g++-64/qmake.conf
+++ b/mkspecs/linux-g++-64/qmake.conf
@@ -20,7 +20,7 @@ include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
-QMAKE_LIBDIR_X11 = /usr/X11R6/lib64
-QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib64
+QMAKE_LIBDIR_X11 = /usr/lib/X11
+QMAKE_LIBDIR_OPENGL = /usr/lib/X11
load(qt_config)
diff --git a/src/3rdparty/webkit/Source/WebKit.pro b/src/3rdparty/webkit/Source/WebKit.pro
index 9be0f4a..c1e575d 100644
--- a/src/3rdparty/webkit/Source/WebKit.pro
+++ b/src/3rdparty/webkit/Source/WebKit.pro
@@ -3,14 +3,9 @@ CONFIG += ordered
include(WebKit.pri)
-!v8 {
- exists($$PWD/JavaScriptCore/JavaScriptCore.pro): SUBDIRS += JavaScriptCore/JavaScriptCore.pro
- exists($$PWD/JavaScriptCore/jsc.pro): SUBDIRS += JavaScriptCore/jsc.pro
-}
webkit2:exists($$PWD/WebKit2/WebKit2.pro): SUBDIRS += WebKit2/WebKit2.pro
-SUBDIRS += WebCore
SUBDIRS += WebKit/qt/QtWebKit.pro
webkit2 {
diff --git a/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro b/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro
index 847f6f4..e2daf24 100644
--- a/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro
+++ b/src/3rdparty/webkit/Source/WebKit/qt/QtWebKit.pro
@@ -2,7 +2,6 @@
CONFIG += building-libs
CONFIG += depend_includepath
-TARGET = QtWebKit
TEMPLATE = lib
这对使用Qt的开源版本没有任何影响,是吗。webkit与任何其他库都没有区别。当然,由于技术原因,webkit的静态构建总是脆弱的,尽管并非不可能。但我没有发现上面的错误。有很多开源许可证,但并非所有都符合LGPL。例如,BSD、MIT和Apache更为宽松,允许在不提供源代码的情况下进行静态链接。如果计划分发应用程序的源代码,那么可以静态链接LGPL库。如果您不是,那么您只能静态链接,前提是您为最终用户提供了一种方法,使其能够根据自己版本的webkit重新链接。(这是简短的答案,阅读LGPL获得完整答案)我已经有一个使用QWebView的Qt项目,并且我也尝试了一个月在其他系统上运行它,所以我无法成功,我的问题是Qt LGPL许可证的最新更改,我可以在LGPL许可证下静态编译Qt项目吗?如果没有,有一种方法可以静态编译那些不是Qt库的dll(msvcrt.dll,msvc100.dll,…),并且只使用应用程序二进制文件分发Qt dll?提供编译的目标代码,特别是以库的形式,您可以使用自己的Qt构建重新链接(请注意,即使是动态重新链接),是处理LGPL的惯用方法。出于某种原因,LGPL中有很多完全免费的FUD。你在哪个平台上,这是哪个Qt版本?Linux、ubuntu 10.4和Qt 4.7.1。我总是得到“找不到-ljscore”error@MickeyShine我试图将jscore、webcore从
src\3rdparty\webkit\source\webcore\release
和src\3rdparty\webkit\source\javascriptcore\release
复制到\lib
。现在编译器可以找到它们,但我得到了链接错误。要清楚,有一种方法可以遵循LGPL和静态编译。您只需要提供已编译的目标代码(.o或.obj文件),以便用户可以重新链接到其版本的LGPL库。链接将带您到提交列表,是否可以更新?