2015-06-10 13 views
13

Ho un'applicazione rapida Qt usando i seguenti moduliÈ possibile distribuire un'applicazione Qt Quick senza Qt Network su OS X?

QT = core gui qml quick widgets \ 
    core-private gui-private \ 
    multimedia printsupport` 

che schiero su OS X. Ora la mia binario principale così come un sacco di plugin Qt Qtick mostrano una dipendenza da Qt Network.

otool -L /path/to/My.app/Contents/MacOS/My

 /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55471.14.18) 
     /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1056.16.0) 
     /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) 
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1) 
     @executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.4.0, current version 5.4.2) 
     @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.4.0, current version 5.4.2) 
     @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.4.0, current version 5.4.2) 
     /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0) 
     /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0) 
     @executable_path/../Frameworks/QtQml.framework/Versions/5/QtQml (compatibility version 5.4.0, current version 5.4.2) 
     /Users/me/Qt/5.4/clang_64/lib/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.4.0, current version 5.4.2) 
     @executable_path/../Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport (compatibility version 5.4.0, current version 5.4.2) 
     @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.4.0, current version 5.4.2) 
     @executable_path/../Frameworks/QtMultimedia.framework/Versions/5/QtMultimedia (compatibility version 5.4.0, current version 5.4.2) 
     /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0) 
     /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0) 
     /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) 
     /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 855.17.0) 

La stessa dipendenza da Qt Network si trova nelle seguenti plugin

My.app/Contents/Frameworks/QtMultimedia.framework/Versions/5/QtMultimedia 
My.app/Contents/Frameworks/QtMultimediaQuick_p.framework/Versions/5/QtMultimediaQuick_p 
My.app/Contents/Frameworks/QtQml.framework/Versions/5/QtQml 
My.app/Contents/Frameworks/QtQuick.framework/Versions/5/QtQuick 
My.app/Contents/Plugins/audio/libqtaudio_coreaudio.dylib 
My.app/Contents/Resources/qml/QtMultimedia/libdeclarative_multimedia.dylib 
My.app/Contents/Resources/qml/QtQuick/Controls/libqtquickcontrolsplugin.dylib 
My.app/Contents/Resources/qml/QtQuick/Dialogs/libdialogplugin.dylib 
My.app/Contents/Resources/qml/QtQuick/Dialogs/Private/libdialogsprivateplugin.dylib 
My.app/Contents/Resources/qml/QtQuick/Layouts/libqquicklayoutsplugin.dylib 
My.app/Contents/Resources/qml/QtQuick/PrivateWidgets/libwidgetsplugin.dylib 
My.app/Contents/Resources/qml/QtQuick/Window.2/libwindowplugin.dylib 
My.app/Contents/Resources/qml/QtQuick.2/libqtquick2plugin.dylib 
  1. E 'possibile utilizzare Qt rapido senza Qt Network?
  2. Esiste una documentazione di dipendenze del modulo per Qt?

Non capisco perché la dipendenza in Qt Network sia compilata nel mio stesso binario.

+3

QtQml dipende QtNetwork. Guardando il codice sorgente Qt, non sembra che ci sia un modo per costruirlo senza di esso. –

+0

Grazie a @FrankOsterfeld. Penso che risponda bene alla prima parte della domanda. Sentiti libero di aggiungere questo come risposta. –

risposta

4

No.

Proof

Il fo script di riga di comando llowing genera un elenco delle dipendenze dei moduli QT5 su Linux:

# Run in e.g. Qt/5.4/gcc_64/lib 
for f in libQt5*.so; do mod=$(basename "$f" .so | cut -c "7-"); echo "$mod"; ldd "$f" | grep "libQt5" | cut -f 1 -d">" | tr -dc "a-zA-Z0-9.[:space:]" | cut -d"." -f 1 | sed 's/libQt5//g'; done 

che si traduce nella seguente output:

Bluetooth 
    DBus 
    Core 
CLucene 
    Core 
Concurrent 
    Core 
Core 
DBus 
    Core 
Declarative 
    Widgets 
    Gui 
    Script 
    Sql 
    XmlPatterns 
    Network 
    Core 
DesignerComponents 
    Designer 
    Widgets 
    Gui 
    Xml 
    Core 
Designer 
    Widgets 
    Gui 
    Xml 
    Core 
Gui 
    Core 
Help 
    Widgets 
    Gui 
    Core 
    Network 
    Sql 
    CLucene 
Location 
    Positioning 
    Quick 
    Gui 
    Core 
    Qml 
    Network 
MultimediaQuick_p 
    Quick 
    Multimedia 
    Gui 
    Core 
    Qml 
    Network 
Multimedia 
    Network 
    Gui 
    Core 
MultimediaWidgets 
    Multimedia 
    Widgets 
    Gui 
    Core 
    OpenGL 
    Network 
Network 
    Core 
Nfc 
    Core 
OpenGL 
    Widgets 
    Gui 
    Core 
Positioning 
    Core 
PrintSupport 
    Widgets 
    Gui 
    Core 
Qml 
    Network 
    Core 
QuickParticles 
    Quick 
    Gui 
    Qml 
    Core 
    Network 
Quick 
    Gui 
    Qml 
    Network 
    Core 
QuickTest 
    Widgets 
    Gui 
    Core 
    Test 
    Quick 
    Qml 
    Network 
QuickWidgets 
    Quick 
    Widgets 
    Gui 
    Qml 
    Core 
    Network 
Script 
    Core 
ScriptTools 
    Core 
    Widgets 
    Gui 
    Script 
Sensors 
    Core 
SerialPort 
    Core 
Sql 
    Core 
Svg 
    Widgets 
    Gui 
    Core 
Test 
    Core 
WebChannel 
    Qml 
    Core 
    Network 
WebKit 
    Sensors 
    Core 
    Positioning 
    Quick 
    Gui 
    Qml 
    Network 
    WebChannel 
    Sql 
WebKitWidgets 
    Widgets 
    WebKit 
    Gui 
    Network 
    Core 
    Sensors 
    PrintSupport 
    OpenGL 
    Positioning 
    Quick 
    Qml 
    WebChannel 
    Sql 
WebSockets 
    Network 
    Core 
Widgets 
    Gui 
    Core 
X11Extras 
    Gui 
    Core 
XmlPatterns 
    Network 
    Core 
Xml 
    Core 
+0

script piacevole, che dimostra solo la corretta descrizione della domanda, ma questo non fornisce alcun suggerimento su come risolvere il problema. Non è una risposta. –

+0

@MarekR Ho aggiunto "no", che ora dovrebbe rispondere alla domanda. Lo script può essere interpretato come documentazione Qt automatizzata. –

+0

E la mia risposta conferma SI. Per Linux, dove Qt può essere spedito come dipendenza del pacchetto, la risposta corretta dovrebbe essere NO (ma in tal caso non c'è alcun problema reale). Sulle piattaforme in cui Qt viene fornito con l'applicazione, è sempre possibile personalizzare le funzionalità di Qt, quindi SI. –

2

Beh, QtQml dipende QtDeclarative che dipende QtNetwork quindi dubito che si possa ...

E per voi, ecco il Qt Library Cross Dependencies

+0

Il link che hai postato è una grande risorsa per Qt 4. Esiste qualcosa di simile per Qt 5? –

+0

@SimonWarta oh hai ragione, avrei dovuto prestare più attenzione a questo –

+0

@SimonWarta come l'ultima modifica sulla pagina che ti ho dato è di due mesi, dubito che la versione 5 del documento è fuori. Ma dubito anche che abbiano cambiato molte cose da Qt 4.8 ... –

0

Non capisco il motivo per cui la dipendenza in Qt Network è compilato nel mio stesso binario.

Se si collega in modo statico il programma con Qt, l'eseguibile risultante deve contenere solo una copia delle routine di libreria denominate, non dell'intera libreria.

+0

Sono collegato dinamicamente per motivi di licenza. La frase "compilato" potrebbe essere fuorviante. Penso che "legato contro" sia quello che stavo cercando di dire. Comunque, grazie per il suggerimento. –

+0

@Simon Warta Ah si. Ho completamente dimenticato che il collegamento statico con la versione GPL di Qt era proibito. Piacere. – uname01

0

L'unica opzione per voi è reconfiguring and rebuilding Qt.
È possibile personalizzare le funzionalità disponibili e sbarazzarsi di molte cose senza rompere la licenza.

Io non farlo per molto tempo, quindi non ho particolari (ho perso il collegamento al meglio l'istruzione, se lo trovo io vi farò sapere). Spero che la documentazione sopra sia sufficiente. Sono sicuro che sarai in grado di trovare alcune migliori istruzioni con Google.

+0

Grazie per il suggerimento generale. Dalle informazioni fornite non ho ancora la minima idea se e come sia possibile distribuire Qt Quick senza Qt Network. Il paragrafo "Includere ed escludere i moduli Qt" riporta esattamente alla mia domanda. –

+0

Non ho Qt sul mio computer attuale, ma provo a cercare l'aiuto dello strumento 'configure' (eseguilo con l'help switch). Qui troverai come disabilitare alcune funzionalità (come il networking). Il problema principale è eseguire 'configure' con gli interruttori appropriati dopo che dovrebbe essere diretto. –

Problemi correlati