9

我尝试使用以下命令构建静态 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 库?如何?

谢谢

4

5 回答 5

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
于 2013-04-23T23:10:37.200 回答
3

几乎不可能。Webkit 使用与配置工具生成的 makefile 不同的 makefile。你可以src\3rdparty\webkit\source自己查。

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

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

可悲的是,这就是我现在得到的一切。

于 2012-01-13T07:24:01.293 回答
2

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

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

删除了对 QtWebKit 静态链接的支持。Qt 4.7 将不再支持 WebKit 的静态链接,因此此提交确保它在文档中被提及,并且如果请求 Qt 的静态链接,配置将禁用 WebKit。

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

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

于 2011-08-26T03:50:12.313 回答
0

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

于 2010-12-04T21:42:22.780 回答
0

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

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

不过,您必须编辑构建才能真正做到这一点,因为它们看起来默认符合 LGPL。

于 2010-12-02T02:04:48.567 回答