2010-12-02 6 views
9

Ich habe versucht, mit dem folgenden Befehl statische Qt-Bibliothek zu erstellen:Ist es möglich, eine statische Qt-Bibliothek mit aktiviertem Webkit zu erstellen? Und wie?

./configure --prefix=/usr/local/qt --static --accessibility --multimedia --audio-backend --svg --webkit --javascript-jit --script --scripttools --declarative --dbus --debug 

Aber ich habe eine Nachricht, sagte:

WARNING: Using static linking will disable the WebKit module. 

Ist das möglich statische Qt-Bibliothek mit allen Modulen aktiviert zu bauen? und wie?

Danke

+0

Auf welcher Plattform sind Sie aktiv und welche Qt-Version ist das? –

+0

Linux, Ubuntu 10.4 und Qt 4.7.1. und ich bekam immer "kann nicht finden -ljscore" Fehler –

+0

@MickeyShine Ich habe versucht, jscore, Webcore von 'src \ 3rdparty \ webkit \ source \ webcore \ release' und' src \ 3rdparty \ webkit \ source \ javascriptcore \ release' zu ​​kopieren zu '\ lib'. Jetzt können Compiler sie finden, aber ich habe einen Linkfehler bekommen. – liuyanghejerry

Antwort

0

Könnte sein, weil Teile davon LGPL sind. So ist es wahrscheinlich möglich, aber die LGPL würde bedeuten, dass Sie Quelle oder kompilierten Objektcode bereitstellen müssen, damit ein Endbenutzer gegen ihre eigene Version relinking könnte.

Wenn Sie das Ergebnis für niemanden bereitstellen, können Sie es wahrscheinlich tun und erfüllen.

Sie müssen den Build bearbeiten, um es tatsächlich zu tun, da es so aussieht, als würden sie standardmäßig der LGPL entsprechen.

+1

Das hätte bei der Verwendung der Open Source-Version von Qt keine Auswirkungen, würde es sein. Webkit unterscheidet sich nicht von anderen Bibliotheken. Aus statischen Gründen waren statische Builds von Webkits immer fragil, wenn auch nicht unmöglich. Ich habe den obigen Fehler allerdings nicht. –

+0

Es gibt viele Open-Source-Lizenzen und nicht alle sind LGPL-konform. Zum Beispiel sind BSD, MIT und Apache nachsichtiger und erlauben statische Verknüpfungen ohne Angabe von Quellen. Wenn Sie die Quelle Ihrer Anwendung verteilen möchten, können Sie statische LGPL-Bibliotheken verknüpfen. Wenn dies nicht der Fall ist, können Sie nur statisch verknüpfen, wenn Sie dem Endbenutzer die Möglichkeit geben, eine Verknüpfung mit der eigenen Version von Webkit herzustellen. (Dies ist die kurze Antwort, lesen Sie LGPL für die vollständige Antwort) –

+0

bereits habe ich ein Qt-Projekt mit QWebView, und ich habe auch versucht, einen Monat auf anderen Systemen laufen, so dass ich nicht erfolgreich sein kann, meine Frage ist auf die neuesten Änderungen Kann ich in der Qt LGPL-Lizenz Qt-Projekt unter LGPL-Lizenz statisch kompilieren? Wenn nein, gibt es eine Möglichkeit, die DLLs statisch zu kompilieren, sind keine Qt-Bibliotheken (msvcrt.dll, msvc100.dll, ...) und verteilen Qt Dlls nur mit der binären Anwendung? –

0

Nun, Lou Franco hat Recht, die LGPL zu verwenden und das Compilieren statisch entspricht nicht wirklich der LGPL. Was die meisten Qt- "Benutzer" oder Entwickler tun, ist, dynamisch zu kompilieren und ihre "eigenen kompilierten" Bibliotheken in das Anwendungsverzeichnis einzuordnen. Dies ist mit der LGPL in Ordnung, solange Sie keinen Code in Qt/QtWebKit/WebKit selbst geändert haben und die Änderungen nicht an Upstream übergeben haben.

+0

Um es klar zu sagen, es gibt eine Möglichkeit, LGPL zu erfüllen und statisch zu kompilieren. Sie müssen nur kompilierten Objektcode (die O- oder OBJ-Dateien) bereitstellen, damit ein Benutzer eine Verknüpfung mit ihrer Version der LGPL-Bibliothek herstellen konnte. –

2

Mit LGPL-Problemen gibt es nichts zu tun, da Ihre App Open Source sein und auf eine Weise lizenziert sein könnte, die mit der LGPL kompatibel wäre.

Scheinbar statisch verknüpfte WebKit wird aus technischen Gründen nicht unterstützt. (Einige Compiler scheinen damit nicht zufrieden zu sein). Der Build-Skript wurde in commit aktualisiert 4221d629e2cf37ee8c5ba7cb595b05ab8c82f113, um es explizit zu verhindern:

entfernt Unterstützung für statische Verknüpfung von QtWebKit. Das statische Verknüpfen von WebKit wird in Qt 4.7 nicht mehr unterstützt, daher stellt dieses Commit sicher, dass es in der Dokumentation erwähnt wird und dass configure WebKit deaktiviert, wenn eine statische Verknüpfung von Qt angefordert wird.

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

Es kann oder mit dem Compiler kann nicht funktionieren, aber ich vermute, dass das Qt-Team wollte nicht, dass die alle für Architekturen offiziell unterstützt die Aufrechterhaltung in der Mühe gehen.

+0

Link bringt Sie zu einer Liste von Commits, könnten Sie bitte aktualisieren? –

+0

@RafaelVega fertig! – gregschlom

3

Fast unmöglich. Webkit verwendet andere Makefiles als die vom Konfigurationswerkzeug generierten Makefiles. Sie können selbst überprüfen.

Wenn Sie versucht haben, Qt statisch mit Webkit zu kompilieren, werden Sie einen Fehler treffen sagt nicht -lwebcore finden. In der Tat wird der webcore.a unter src\3rdparty\webkit\source\webcore\release generiert, also auch -ljscore. Aber wenn Sie sie nach/lib yourself kopieren, wird der Link error immer als Popup angezeigt.

Ich habe versucht, makefiles von webcore und jscore unter -static bearbeiten, aber es hat überhaupt nicht funktioniert.

Leider ist das alles, was ich jetzt habe.

4

Für Qt 4.8.3 musste ich das patchen.Pro-Dateien, um ein einzelnes QtWebKit anstelle von separaten WebKit- und JavaScriptCore-Bibliotheken zu erstellen. Der Linker wird verwirrt, da zwischen den beiden Bibliotheken Abhängigkeiten bestehen.

Nicht sicher, ob ein ähnlicher Ansatz für Ihr Qt 4.7.1 funktioniert.

Ich werde die Lizenzprobleme nicht erwähnen.

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