QT - static build



  • Hi Leute

    ich will mein QT-Projekt statisch bauen.
    Ich habe schon Tutorials dazu gefunden, aber die sind fast alle so alt, dass nicht mal mehr der Verzeichnisbaum vom QT-Framework noch dem entspricht, was im Tutorial beschrieben wird.

    Kennt jemand ein einigermaßen aktuelles Tutorial, was ich genau tun muss, um einen static-build meines aktuellen Projekts durchzuführen?
    Ich verwende aktuell QT 5.6, welches mit dem QT-Developer 3.6.1 geliefert wurde.

    gruß Tobi



  • Hast du eine Lizenz? Mit der kostenlosen Version darfst du nicht statisch linken.



  • Naja wenn ich die Software nur für mich selbst brauche, sollte das egal sein.



  • It0101 schrieb:

    Naja wenn ich die Software nur für mich selbst brauche, sollte das egal sein.

    Dann stellt sich die Frage wieso dann statisch linken? Wenn du das eh nur lokal verwenden möchtest?



  • Ich formuliere es anders: ich will es nicht verkaufen und auch nicht kostenlos an externe weitergeben.

    Wenn ich QT-Software weitergebe, dann nur dynamisch gelinktes Zeug. Aber jetzt will ich für den internen Gebrauch eine Software statisch linken.

    Und ne Diskussion darüber wollte ich nicht lostreten.





  • Kenne ich bereits. Leider verweisen viele auf https://wiki.qt.io
    wo die Links teilweise nicht mehr existieren, bzw. ins nichts verweisen.
    Z.B. das hier
    https://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MinGW
    erwähnte Script ".ps1" z.b. ist nicht mehr in dem Sourceforge-Projekt.

    Einerseits wollen die pro Entwickler 80$ im Monat für ne kommerzielle Lizenz, andererseits funktioniert nicht mal das wiki ordentlich... Naja ich krieg das schon irgendwie hin.



  • wo die Links teilweise nicht mehr existieren, bzw. ins nichts verweisen.

    wayback machine.



  • Welches Betriebssystem und mit welchem Compiler?



  • Win7 64bit mit 4.9er MinGW 32bit



  • Statischen Qt build hast du schon? Da musst du bei Qt "configure" (vor dem build) einfach -static mit dazugeben.

    Oder was genau ist das Problem?



  • Ich hab das unter Windows und mit MinGW mal gemacht und kann Dir da wohl weiterhelfen. Leider hab ich mir die Schritte damals aber nicht aufgeschrieben, deshalb muss ich es erst selbst noch einmal ausprobieren. Heute Abend komme ich aber nicht mehr dazu, schau bitte in 2-3 Tagen nochmal hier rein!

    @Hi: ich glaube nicht das er einen statischen Build hat, sonst gäbe es das Problem wohl nicht



  • Erstmal danke für euer Feedback!

    Ich habe das Problem, dass ich beides brauch.
    Ich habe Anwendungen, die ich aus lizenzrechtlichen Gründen dynamisch bauen muss, und das interne Zeugs was ich statisch bauen will.

    Und ich habe bisher nichts weiter getan als nen Ready-To-Use-QTCreator zu installieren. Seitdem habe ich nur entwickelt. Ich habe in meinem Leben noch kein QT konfiguriert 😃



  • Das Problem kenn ich. Ich hab dafür mehrere builds erstellt, die ich dann in Visual Studio switchen kann. Wie das mit QTCreator geht, keine Ahnung.

    Wie du selbst einen build erstellst, findest du zuhauf im Netz. Dann wiegsagt einfach bei der Konfiguration -static mitgeben.

    Und die statischen Libs dann genauso wie auch andere verwenden.. wenn's noch Probleme gibt, meld dich einfach.



  • Ich kann dir nicht 100% versprechen das es funktioniert, da ich aktuell noch beim kompilieren bin (Qt kompilieren dauert einige Stunden!).

    Meine vorhandene Qt Installation befindet sich im Ordner "C:\Qt\Qt5.5.1" und den Quellcode habe ich in "C:\qt-static" entpackt. Die Pfade musst du in den folgenden Schritten entsprechend anpassen!

    Zuerst habe ich ein kleines Skript für die Umgebungsvariablen erstellt (wie hier beschrieben: http://doc.qt.io/qt-5/windows-building.html).

    SET _ROOT=C:\qt-static
    SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;C:\Qt\Qt5.5.1\Tools\mingw492_32\bin;%PATH%
    SET QMAKESPEC=win32-g++
    SET _ROOT=
    

    Das Skript habe ich unter "C:\qt-static\build.cmd" gespeichert.

    Als nächstes startest du die Kommandozeile und gibst folgende Befehle ein:

    cd \qt-static
    build.cmd
    configure -debug -static -opensource -opengl desktop
    mingw32-make
    

    Das sollte es gewesen sein, wie gesagt nur auf die Pfade achten! Außerdem solltest du dich etwas mit den Optionen für configure befassen, weitere Infos dazu findest du hier: http://doc.qt.io/qt-5/configure-options.html.

    Ich antworte später nochmal ob es so bei mir geklappt hat...



  • Also das hat soweit funktioniert, nur das Modul "qtdeclarative" konnte nicht übersetzt werden. Dafür wird wohl zusätzlich Python benötigt, aber das musst du dann selbst einmal ausprobieren.

    Zum Schluss musst du noch in den Einstellungen die neue Qt Version hinzufügen (in meinem Beispiel wäre der Pfad "C:\qt-static\qtbase\bin\qmake.exe") und ein neues Kit mit dieser Version anlegen.



  • Schade das ich noch kein Feedback von dir habe!? Mir hat das Thema keine Ruhe gelassen, deshalb habe ich jetzt eine virtuelle Maschine mit Python aufgesetzt und kompiliere nochmal. Die Tage schreibe ich dann mal eine genaue Anleitung auf http://www.partsoft.de!



  • Ich bin gerade an der Sache dran. Ich stelle mich bei sowas immer bissel dummdödelich an, daher dauert das bei mir immer länger 😃



  • Bennisen schrieb:

    Hast du eine Lizenz? Mit der kostenlosen Version darfst du nicht statisch linken.

    Doch, darf er. Qt ist ein OpenSource Projekt das (bis auf wenige Module) ua. unter der L-GPLv2 bzw. L-GPLv3 verfügbar ist. Diese erlaubt kommerzielle Projekte unter bestimmten, einfach einzuhaltenden Bedingungen.

    http://www.gnu.org/licenses/lgpl-3.0.html
    http://www.gnu.org/licenses/gpl-faq#LGPLStaticVsDynamic

    Dennoch raten wir unseren Kunden regelmäßig vom statischen Linken ab, da es außer zusätzlicher Probleme und schwierigeren Anforderungen keinen Vorteil bietet. Schnelleren Startup erhältst du auch zB. mittels Prelinking und wenn es darum geht lediglich ein einzelnes Binary zu haben kannst du UPX Packer zB. nutzen.



  • Der Hauptgrund für das statische Linken für den firmeninternen Gebrauch ist, dass ich ein schlankes kompaktes Binary habe, ohne 50MB DLLs im Gepäck. Es ist einfach komfortabler.


Log in to reply