是否可以在启用webkit的情况下构建静态Qt库?如何?

时间:2010-12-02 01:56:19

标签: 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 WebKit module.

是否可以在启用所有模块的情况下构建静态Qt库?怎么样?

由于

5 个答案:

答案 0 :(得分:4)

对于Qt 4.8.3我必须修补.pro文件以制作单个QtWebKit而不是单独的WebKit和JavaScriptCore库。链接器变得混乱,因为两个库之间存在相互依赖关系。

不确定类似的方法是否适用于您的Qt 4.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

答案 1 :(得分:3)

几乎不可能。 Webkit使用除configure文件生成的makefile之外的make文件。您可以自己查看src\3rdparty\webkit\source

如果你试图用webkit编译Qt static,你会遇到一个错误,说无法找到-lwebcore。事实上,webcore.a是在src\3rdparty\webkit\source\webcore\release生成的,-ljscore也是如此。但是如果你将它们复制到/ lib yourslef,链接错误总是会弹出。

我尝试编辑webcore和jscore的makefile,添加-static,但它根本不起作用。

可悲的是,这就是我现在所拥有的一切。

答案 2 :(得分:2)

与LGPL问题无关,因为您的应用程序可能是开源的,并且以与LGPL兼容的方式获得许可。

显然,由于技术原因,不支持静态链接的WebKit。 (有些编译器似乎对它不满意)。构建脚本已在commit 4221d629e2cf37ee8c5ba7cb595b05ab8c82f113中更新,以明确禁止它:

  

删除了对QtWebKit静态链接的支持。   在Qt 4.7中不再支持WebKit的静态链接,因此这个提交确保在文档中提到它并且如果请求静态链接Qt,configure会禁用WebKit。

https://www.qt.gitorious.org/qt/qt/commit/4221d629e2cf37ee8c5ba7cb595b05ab8c82f113

它可能适用于您的编译器,也可能不适用,但我怀疑Qt团队不想为所有官方支持的架构维护这一点。

答案 3 :(得分:0)

可能因为它的一部分是LGPL。因此,它可能是可能的,但LGPL意味着您必须提供源代码或编译的目标代码,以便最终用户可以重新链接他们自己的版本。

如果您没有将结果部署到任何人,那么您可能会这样做并遵守。

您必须编辑构建才能实际执行此操作,因为默认情况下它们似乎符合LGPL。

答案 4 :(得分:0)

嗯,Lou Franco是对的,使用LGPL并静态编译并不真正符合LGPL。大多数Qt"用户"或者开发人员要做的是动态编译,使他们自己编译的"应用程序目录中的库。只要您没有更改Qt / QtWebKit / WebKit本身的任何代码并且没有向上游提供更改,LGL就可以了。