Можно ли построить статическую библиотеку Qt с включенным webkit?И как? - PullRequest
9 голосов
/ 02 декабря 2010

Я попытался собрать статическую библиотеку 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 ]

4 голосов
/ 24 апреля 2013

Для 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
3 голосов
/ 13 января 2012

Почти невозможно. Webkit использует отдельные make-файлы, кроме make-файлов, сгенерированных инструментом configure. Вы можете проверить src\3rdparty\webkit\source самостоятельно.

Если вы попытались скомпилировать Qt static с помощью webkit, вы увидите сообщение об ошибке, которое не может найти -lwebcore. Фактически, webcore.a генерируется на src\3rdparty\webkit\source\webcore\release, так же, как и -ljscore. Но если вы скопируете их в / lib yourslef, ошибка ссылки всегда всплывает.

Я пытался отредактировать make-файлы webcore и jscore, добавив -static, но это не сработало вообще.

К сожалению, это все, что я получил сейчас.

2 голосов
/ 26 августа 2011

Ничего общего с проблемами LGPL, поскольку ваше приложение может иметь открытый исходный код и лицензироваться таким образом, чтобы быть совместимым с LGPL.

Очевидно, статически связанный WebKit не поддерживается по техническим причинам.(Некоторые компиляторы, кажется, не довольны этим).Сценарий сборки был обновлен в коммите 4221d629e2cf37ee8c5ba7cb595b05ab8c82f113 для явного предотвращения этого:

Удалена поддержка статической компоновки QtWebKit.Статическое связывание WebKit больше не будет поддерживаться в Qt 4.7, поэтому этот коммит гарантирует, что он упоминается в документации, и что configure отключает WebKit, если запрашивается статическое связывание Qt.

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

Он может работать, а может и не работать с вашим компилятором, но я подозреваю, что команда Qt не хотела ставить задачу поддерживать это для всех официально поддерживаемых архитектур.

0 голосов
/ 05 декабря 2010

Что ж, Лу Франко прав, использование LGPL и компиляция статически не соответствуют LGPL.То, что делают большинство «пользователей» или разработчиков Qt, это динамическая компиляция, предоставляя свои «скомпилированные» библиотеки в каталоге приложения.Это нормально для LGPL, если вы не изменили код в самом Qt / QtWebKit / WebKit и не предоставили изменения в апстрим.

0 голосов
/ 02 декабря 2010

Может быть потому, что его части LGPL.Таким образом, это возможно, но LGPL будет означать, что вы должны предоставить исходный или скомпилированный объектный код , чтобы конечный пользователь мог ссылаться на свою собственную версию.

Если вы неРазвернув результат кому угодно, вы, вероятно, сможете это сделать и выполнить.

Вам придется отредактировать сборку, чтобы она действительно выполнялась, поскольку, похоже, по умолчанию они соответствуют LGPL.

...