Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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
C++ 是否可以在启用webkit的情况下构建静态Qt库?怎么做?_C++_Qt_Qt4_Webkit_Qtwebkit - Fatal编程技术网

C++ 是否可以在启用webkit的情况下构建静态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

我尝试使用以下命令构建静态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 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库。链接将带您到提交列表,是否可以更新?