Qt Programm weiter geben



  • Hallo , ich hab grad ein Problem:
    In Qt Creator habe ich grad ein Programm erstellt und es läuft in Qt Creator ohne Probleme 🙂
    So wenn ich jz in meinen ordner mit den projekten gehe und mir die exe raus such und sie ausführe dann kommt eine Fehlermeldung dass bestimmte Dll´s gebraucht werden.
    Ich habe gehört dass es helfen soll Qt statisch zu linken.
    Kann mir jmd mal erklären wie man das macht?

    Mofiche



  • Je nach Lizenz und Verwendungszweck darfst Du vermutlich nicht statisch linken. (Hier reicht aber mein Wissen für Qt nicht aus.)

    Alternativ Lösung (1) wäre die notwendigen Qt DLLs einfach in Dein Ordner zu kopieren, wo Dein Kompilat/EXE liegt.

    Alternativ Lösung (2) der Pfad zu den Qt DLL Dateien in die globale Umgebungsvariable PATH mit auf nehmen.



  • das mit dem kopieren habe ich schon versucht, da kommt die meldung das in irgendeiner datei etwas falsch ist



  • Ab Qt 5 brauchst Du auch folgende Dateien noch:
    C:\Qt\Qt5.5.1\5.5\msvc2013\plugins\platforms -> C:\DeinOrdner\platforms\
    C:\Qt\Qt5.5.1\5.5\msvc2013\bin\icudt54.dll, icuin54.dll, icuuc54.dll -> C:\DeinOrdner\

    Auf dem Zielsystem bei MS VS Compiler auch noch das C++ Redistributable.



  • Statisches linken ist bei der Community Edition nicht erlaubt. Laut GPL/LGPL-Lizenz muss der Endanwender u.a. die Bibliothek (Qt) gegen eine andere Version austauschen können, was beim statischen linken ja nicht möglich ist.



  • Vielleicht hilft dir das QT Windows Deployment Tool, siehe http://doc.qt.io/qt-5/windows-deployment.html, ganz unten.

    Wenn du den Creator verwendest, kannst du das automatisieren, indem du in den Projekt-Einstellungen zur Ausführung einen benutzerdefinierten Deployment Schritt hinzufügst:

    Kommando: C:\Qt\5.6\DEIN_KIT\bin\windeployqt.exe
    Argumente: PFAD_ZU_DEINER_EXE.exe

    Bei mir klappt das problemlos.

    vg



  • Super. genau das war mein Problem.

    das mit dem Automatisieren fände ich interssant, aber wo muss ich das den Einstellen? unter Ausführen und Erstellen?



  • Unter erstellen baust Du Dir nur Deine EXE. Dieser Prozesschritt hat nichts mit deiner Auslieferung zu tun.

    Wenn Du Dir sagst "Ja, das ist die finale Version die ich ausliefern möchte." dann solltest Du den letzten Schritt (manuell) anstoßen. Davor (bei jedem Kompilat) macht das kein Sinn.

    * Ergänzend nur: Es gibt unter MS VS die Möglichkeiten Pre- und Prostbuildsteps zu definieren. Wir nutzen das um die aktuelle Revisionsnummer zu ermitteln.



  • was_weiß_ich schrieb:

    das mit dem Automatisieren fände ich interssant, aber wo muss ich das den Einstellen? unter Ausführen und Erstellen?

    Projekte -> Ausführung -> Deployment

    jb schrieb:

    Wenn Du Dir sagst "Ja, das ist die finale Version die ich ausliefern möchte." dann solltest Du den letzten Schritt (manuell) anstoßen. Davor (bei jedem Kompilat) macht das kein Sinn.

    Das deployment dauert bei mir etwa 2s, denn das Tool ist schlau genug, die schon vorhandenen dlls nicht jedesmal neu zu schreiben.
    Aber du hast recht, Sinn macht das keinen. Es gibt im Menü einen Befehl "Ausführen ohne Deployment", aber der ist ja etwas mühsam zu erreichen.

    Man kann sich eine zweite, leere Deployment Methode erzeugen und dann nur bei Bedarf auf die Methode mit Funktion wechseln. Ist aber dann nur noch 'halbatomatisch' 🙂



  • partsoft schrieb:

    Statisches linken ist bei der Community Edition nicht erlaubt. Laut GPL/LGPL-Lizenz muss der Endanwender u.a. die Bibliothek (Qt) gegen eine andere Version austauschen können, was beim statischen linken ja nicht möglich ist.

    Doch ist es. Bitte lies wenigstens die Lizenz bevor du irgendwelche Behauptungen darüber ins Internet stellst.

    Du darfst statisch Linken. Nur macht es 1. keinen Sinn und 2. die Quellcodelieferung unnötig aufwändig da du dann die Object-Files und Linkerscripts liefern musst. Diese sind zudem häufig nicht ohne Anpassungen auf anderen Maschinen lauffähig.



  • picaschaf schrieb:

    Bitte lies wenigstens die Lizenz bevor du irgendwelche Behauptungen darüber ins Internet stellst.

    Die habe ich nicht nur gelesen, sondern mir extra auch noch von einem Anwalt erklären lassen. Du hast aber trotzdem Recht, wenn er den Quelltext mit ausliefert, darf er natürlich auch statisch linken. Ich bin hier von einer kommerziellen Nutzung, bzw. Freeware ausgegangen!



  • partsoft schrieb:

    picaschaf schrieb:

    Bitte lies wenigstens die Lizenz bevor du irgendwelche Behauptungen darüber ins Internet stellst.

    Die habe ich nicht nur gelesen, sondern mir extra auch noch von einem Anwalt erklären lassen. Du hast aber trotzdem Recht, wenn er den Quelltext mit ausliefert, darf er natürlich auch statisch linken. Ich bin hier von einer kommerziellen Nutzung, bzw. Freeware ausgegangen!

    Ich habe nicht geschrieben, dass er seinen Quellcode weitergeben muss. Das muss er nicht. Der Lizenznehmer muss das Ergebnis reproduzieren können. Das kann er bei dynamischen Linken durch zusammenkopieren und bei statischem Linken durch das erneute Linken. Dazu braucht der Lizenznehmer die Object-Files und die Linkerscripts. Er benötigt dazu *keinen* Quellcode.

    Dein angeblicher Anwalt sollte mal vielleicht die GNU FAQ lesen, oder eine Fortbildung besuchen: http://www.gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic
    Vielleicht solltest du auch einen Anwalt mit der richtigen Spezialisierung beauftragen.


Log in to reply