我尝试使用以下命令构建静态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库?怎么样?
由于
答案 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就可以了。