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 ファイルにパッチを適用して、個別の WebKit ライブラリと JavaScriptCore ライブラリではなく、単一の QtWebKit を作成する必要がありました。2 つのライブラリ間に相互依存関係があるため、リンカーは混乱します。

同様のアプローチが 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 は、configure ツールによって生成される makefile 以外のスタンド アロング Makefile を使用します。自分で確認できsrc\3rdparty\webkit\sourceます。

Qt static を webkit でコンパイルしようとすると、-lwebcore が見つからないというエラーが表示されます。実際、webcore.a は で生成されsrc\3rdparty\webkit\source\webcore\release、-ljscore も生成されます。しかし、それらを /lib yourslef にコピーすると、常にリンク エラーがポップアップします。

を追加して webcore と jscore の makefile を編集しようとしました-staticが、まったく機能しませんでした。

悲しいことに、私が今得たものはそれだけです。

于 2012-01-13T07:24:01.293 に答える
2

アプリはオープン ソースであり、LGPL と互換性のある方法でライセンス供与されている可能性があるため、LGPL の問題とは関係ありません。

どうやら静的にリンクされた WebKit は、技術的な理由でサポートされていません。(一部のコンパイラはそれに満足していないようです)。ビルド スクリプトはコミット 4221d629e2cf37ee8c5ba7cb595b05ab8c82f113 で更新され、明示的に防止されています。

QtWebKit の静的リンクのサポートを削除しました。WebKit の静的リンクは Qt 4.7 ではサポートされなくなります。そのため、このコミットにより、ドキュメントに記載されていることを確認し、Qt の静的リンクが要求された場合に configure が WebKit を無効にします。

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

お使いのコンパイラで動作する場合と動作しない場合がありますが、Qt チームは、公式にサポートされているすべてのアーキテクチャでそれを維持するという手間をかけたくなかったのではないかと思います。

于 2011-08-26T03:50:12.313 に答える
0

一部がLGPLだからかもしれません。したがって、おそらく可能ですが、LGPL は、エンドユーザーが自分のバージョンに対して再リンクできるように、ソースまたはコンパイル済みのオブジェクト コードを提供する必要があることを意味します。

結果を誰にも展開しない場合は、おそらくそれを実行して準拠することができます。

ただし、デフォルトで LGPL に準拠しているように見えるため、実際に実行するにはビルドを編集する必要があります。

于 2010-12-02T02:04:48.567 に答える
0

Lou Franco の言うとおりです。LGPL を使用して静的にコンパイルすることは、実際には LGPL に準拠していません。ほとんどの Qt の「ユーザー」または開発者が行うことは、アプリケーション ディレクトリに「独自のコンパイル済み」ライブラリを提供して、動的にコンパイルすることです。これは、Qt / QtWebKit / WebKit 自体のコードを変更せず、アップストリームに変更を提供しない限り、LGPL で問題ありません。

于 2010-12-04T21:42:22.780 に答える