Frage

Ich folgte kürzlich eine Diskussion über die über Mailingliste Qt4-Interesse, ob es legal ist oder nicht kommerzielle / proprietäre Anwendung zu erstellen und statisch verknüpfen Qt4 hinein. Zwar gibt es einige nicht-bewährte Wege sind, dies zu tun (von Objektdateien bereitstellt und ein Makefile etc. an den Kunden), ist es nicht klingen wie so eine gute Idee, afterall.

Eines meiner Projekte unter Verwendung der LGPL-lizenzierte Qt4-Bibliotheken und ich versende sich als separater DLLs / Dylibs / ist so zu meinen Kunden, ein einfaches Installationsprogramm auf allen Plattformen. Während dies ziemlich gut funktioniert so weit, würde ich ein optimieren mag), um die Größe des Installers durch die Qt-Bibliothek Größe zu reduzieren, indem nur mit, was ich brauche, die Start / Ladegeschwindigkeit meiner Anwendung b) erhöhen.

Ich bin vertraut mit dem Kompilieren von Qt selbst, aber Qt bekam eine Menge Fahnen und Schalter.

Im Moment bin ich Gebäude mit den folgenden Flags:

./configure \
  -fast \
  -opensource \
  -qt-sql-sqlite \
  -nomake demos examples \
  -silent \
  -no-qt3support \
  -no-gif \
  -plugin-sql-mysql \
  -release \
  -no-xmlpatterns \
  -no-multimedia

Ich bin nicht ganz sicher, welche Wirkung / Auswirkungen die folgenden Flags haben:

  • -no-stl
  • -no-javascript-jit
  • -no-nis
  • -separate-debug-info
  • -no-openvg
  • -no-mitshm

Gibt es etwas, was ich tun kann, zum Beispiel durch Optimierung Schalter für den Compiler bereitstellt oder nicht genutzten Funktionen aus der integrierten Qt-Bibliothek „Strippen“, um es kleiner zu machen (was leicht sein würde, mit statischer Builds). Ich habe nicht viel Erfahrung damit.

Oh, nur als Randnotiz, meine kompilierte Anwendung Größe beträgt etwa 600 kb (nicht gestrippt) bei der Verknüpfung gegen Qt dynamisch. Ich experimentierte mit ihm und fand es rund 4 MB groß sein, wenn ich einen Link statisch; aber auf diese Weise würde ich nicht mehr als 40 MB von Qt-Bibliotheken mehr umfassen müssen.

So setzt alles oben in eine Frage / Anfrage:

Wenn Sie weiter fortgeschritten, als ich zu diesem Thema sind, wie optimieren Sie / Ihre eigenen Anwendungen bereitstellen und sicherstellen, dass sie beginnen, schnell und nur enthalten, was notwendig ist?

War es hilfreich?

Lösung

Es gibt nur wenige Dinge, die ich mir vorstellen kann:

  • verwenden, um einen Compiler / Linker-Kombination, die eine gute Größe Optimierungen der Fall ist. MSVC ist viel besser auf diesem als MinGW zum Beispiel. All Qt-Release DLLs mit MSVC insgesamt gebaut bei ~ 21 MB. Errichtet mit MinGW insgesamt sie bei ~ 41 MB. By the way, haben Sie wirklich müssen alle DLLs versenden?
  • verwenden, um die -ltcg (Link-Zeitcodegenerierung) Flag über Objektdateien zu optimieren.
  • Verwendung Präprozessor Flags Teile der Qt-Funktionalität auszuschließen. z: QT_NO_STL = -no-stl.
  • versuchen die MMX / 3d jetzt / sse2 Flaggen
  • entfernen einige der Stile (-no-style -)

Andere Tipps

Wenn Sie alle Module übersprungen haben und so, dass Sie das Gefühl, die Sie nicht benötigen, dann können Sie auch weiterhin einzelne Klassen mit dem qconfig Werkzeug (Art versteckt in dem $ QTDIR / tools / Baum) und entfernen. Nur von Abhängigkeiten Vorsicht -. Sie könnten ein paar Mal wiederholen müssen, um zu bekommen, Qt zu bauen (zum Beispiel QSpinBox hängt von QValidator vorhanden ist)

Beim Aufbau Qt, insbesondere mehrfach, ist die -nomake Flagge eine große Zeitersparnis. Versuchen Sie -nomake Beispiele -nomake Demos.

Eine weitere Optimierung für die allgemeine Geschwindigkeit liegt in Compiler-Optimierungen zu verwenden, wenn Qt kompilieren, aber Sie müssen einige Dateien bearbeiten. Wenn Sie Qt von Git bekommen, beenden Sie mit einem qtbase / dir auf. Zuerst Sie den configure-Skript ausführen, die Qmake baut

Hinweis:

können Sie Makefile.win32 bzw. Makefile.unix und fügen Sie Zeilen wie ändern
QMAKE_CXXFLAGS_RELEASE = -CompilerDependentOptimizerSwitches 

Wenn Sie qmake wollen optimiert werden, aber ich glaube nicht, dass es wirklich notwendig ist, wenn man bedenkt, dass die Laufzeit von qmake für eine mittelgroße app 0.0000001% der gesamten Kompilierung sein könnte.

Aber die real Optimierung kommt, wenn die mkspecs bearbeiten, die Qt verwendet werden, um zu bauen.

Zum Beispiel unter Windows mit VS2012, würden Sie wahrscheinlich qtbase/mkspecs/win32-msvc2012/qmake.conf ändern.

Ex. : Auf Standard-Qt5.1, die msvc2012 mkspec lautet:

QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE

Da Sie für die Größe optimieren möchten, könnten Sie es ersetzen mit:

QMAKE_CFLAGS_RELEASE    = -O1 -MD

(Nach http://msdn.microsoft.com/en-us /library/8f8h5cxt.aspx )

Manchmal enthält es mehr High-Level-mkspecs in qtbase/mkspecs/common/ dir gefunden.

ich erfolgreich Qt5.1 auf Debian / g ++ 4.8.1 mit -O3 -march=native zusammengestellt (die Standardeinstellung ist -O2), wenn es jemand dient.

Nachdem Sie das getan, führen Sie einfach machen auf dem Qt git root, und gehen ein Bier mit Ihrem Team haben, denn auch auf einem guten Computer es ewig dauern wird (ca.. 2h auf einem i7, ohne Demos / Beispiele zu bauen, aber mit webkit).

sed -i 's@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD -march=native@g'  qtbase/mkspecs/common/linux.conf

Wird optimieren Qt5.8 auf Linux

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top