2010-12-02 13 views
9

me trató de construir la biblioteca Qt estático con el siguiente comando:¿Es posible construir una biblioteca de Qt estática con webkit habilitado? ¿Y cómo?

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

pero me dio un mensaje dijo:

WARNING: Using static linking will disable the WebKit module. 

¿Es posible la construcción de la biblioteca Qt estática con todos los módulos habilitados? ¿y cómo?

Gracias

+0

¿Qué plataforma es usted y qué versión de Qt es esta? –

+0

Linux, ubuntu 10.4 y Qt 4.7.1. y siempre obtenía el error "no puedo encontrar -ljscore" –

+0

@MickeyShine Intenté copiar jscore, webcore de 'src \ 3rdparty \ webkit \ source \ webcore \ release' y' src \ 3rdparty \ webkit \ source \ javascriptcore \ release' a '\ lib'. Ahora los compiladores pueden encontrarlos pero obtuve un error de enlace. – liuyanghejerry

Respuesta

0

Podría ser porque las partes son LGPL. Por lo tanto, probablemente sea posible, pero la LGPL significa que debe proporcionar el código fuente del objeto compilado para que el usuario final pueda volver a vincular su propia versión.

Si no está implementando el resultado a nadie, entonces probablemente podría hacerlo y cumplir.

Tendrás que editar la compilación para hacerlo, ya que parece que cumplen con LGPL por defecto.

+1

Eso no tendría ningún efecto cuando se utiliza la versión de código abierto de Qt, ¿o sí? webkit no es diferente de cualquier otra biblioteca. Sin duda es por razones técnicas, las construcciones estáticas de webkit siempre fueron frágiles, aunque no imposibles. Aunque no he recibido el error anterior. –

+0

Hay muchas licencias de código abierto y no todas cumplen con LGPL. Por ejemplo, BSD, MIT y Apache son más indulgentes y permiten enlaces estáticos sin dar origen. Si planea distribuir el origen de su aplicación, puede vincular estáticamente contra las bibliotecas de LGPL. Si no lo eres, entonces solo puedes vincular estáticamente si le das una forma al usuario final de volver a vincular su propia versión de webkit. (esta es la respuesta corta, lea LGPL para la respuesta completa) –

+0

ya tengo un proyecto Qt usando QWebView, y también intenté por un mes ejecutarlo en otros sistemas, así que no puedo tener éxito en eso, mi pregunta es sobre los últimos cambios en la licencia Qt LGPL, ¿puedo compilar estáticamente el proyecto qt bajo licencia LGPL? si no, hay una manera de compilar estáticamente los archivos DLL que no son bibliotecas Qt (msvcrt.dll, msvc100.dll, ...) y solo distribuye Qt Dlls con aplicaciones binarias. –

0

Bueno, Lou Franco tiene razón, usar el LGPL y compilar estáticamente no cumple realmente con la LGPL. Lo que hacen la mayoría de los "usuarios" o desarrolladores de Qt es compilar dinámicamente, dividir sus bibliotecas "propias compiladas" en el directorio de la aplicación. Esto está bien con la LGPL, siempre y cuando no haya cambiado ningún código en Qt/QtWebKit/WebKit y no haya proporcionado los cambios en la versión anterior.

+0

Para ser claros, hay una manera de cumplir con LGPL y compilar estáticamente. Solo necesita proporcionar un código de objeto compilado (los archivos .o o .obj) para que el usuario pueda volver a vincular su versión de la biblioteca LGPL. –

2

Nada que ver con problemas LGPL, ya que su aplicación podría ser de código abierto y con licencia de una manera que sería compatible con la LGPL.

WebKit aparentemente estáticamente enlazado no es compatible por razones técnicas. (Algunos compiladores parecen no estar contentos con eso). La escritura de la estructura se ha actualizado en comprometerse 4221d629e2cf37ee8c5ba7cb595b05ab8c82f113 para evitar explícitamente:

eliminado el soporte para la vinculación estática de QtWebKit. La vinculación estática de WebKit ya no se admitirá en Qt 4.7, por lo que esta confirmación se asegura de que se mencione en la documentación y que configure deshabilita WebKit si se solicita el enlace estático de Qt.

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

Puede o no puede trabajar con su compilador, pero sospecho que el equipo de Qt no quería ir a la molestia de mantener que para todas las arquitecturas compatibles.

+0

El enlace lo lleva a una lista de confirmaciones, ¿podría actualizar? –

+0

@RafaelVega hecho! – gregschlom

3

Casi imposible. Webkit utiliza los archivos make independientes de los makefiles generados por la herramienta de configuración. Puede marcar src\3rdparty\webkit\source usted mismo.

Si ha intentado compilar Qt static con webkit, encontrará un error que dice no se puede encontrar -lwebcore. De hecho, el webcore.a se genera en src\3rdparty\webkit\source\webcore\release, también lo hace -ljscore. Pero si los copia en/lib yourslef, el error de enlace siempre aparece.

He intentado editar makefiles de webcore y jscore agregando -static, pero no funcionó en absoluto.

Tristemente, eso es todo lo que tengo ahora.

4

Para Qt 4.8.3 tuve que parchar el.archivos pro para crear un solo QtWebKit en lugar de bibliotecas separadas WebKit y JavaScriptCore. El enlazador se confunde porque hay interdependencias entre las dos bibliotecas.

No estoy seguro si un enfoque similar funcionará para su Qt 4.7.1.

No voy a mencionar los problemas de licencia.

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 
Cuestiones relacionadas