Seite 1 von 2
Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 30. April 2013 18:11
von Dansel94
Hallo Forum,
ich bin relativ neu in der Programmierwelt (mache eine Informatiker Ausbildung an einer Berufsschule).
Ich habe schon einige Programme mit QT geschrieben. Diese möchte ich nun gerne auch auf meinem Windows PC nutzen können.
Die Methode mit den DLLs in den Ausgabeordner der ".exe" Datei kenne ich schon. Sie funktionierte bis Qt 4.8 auch. Mit Qt5 nun nicht mehr. Aber egal.
Ich möchte die Programme gerne auch nutzen ohne die DLLs in jeden Ordner packen zu müssen und auch auf PCs die kein QT haben.
Gibt es da eine Möglichkeit?
Mit freundlichen Grüßen
D. Buchholz
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 30. April 2013 19:05
von veeman
Die Bibiotheken (DLLs) müssen in den selben Ordner wie die Application (EXE), anderst gehts nicht.
Außer du hast ne Lizenz um das ganze auch statisch zu verwenden.
Ab Qt5 sind viele neue Abhängigkeiten dazugekommen. Diese Bibliotheken müssen auch der application bekannt sein.
Der Grund warum die Anwendung nicht startet ist wahrscheinlich das diese die Platform Bibliothek (je nach System unterschiedlich eg. qwindows.dll für Windows) nicht findet.
Diese müssen sich in einem Unterordner Namens platform(s) neben der EXE befinden.
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 30. April 2013 19:52
von Dansel94
Vielen Dank für die schnelle Hilfe. Dann muss ich es wohl auf dem Weg der DLLs machen.
Habe alle geforderten DLLs drin inkl. dem platforms Ordner mit der qwindows.dll.
Bekomme aber diese Fehlermeldung:
http://puu.sh/2KceI.png
MfG
D. Buchholz
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 30. April 2013 22:39
von Christian81
Dependency Walker ist dein Freund
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 1. Mai 2013 10:33
von Dansel94
Den Dependency Walker habe ich mir mal geladen. Da muss ich jetzt die DLLs "durchleuchten" oder die mit Qt erstellte ".exe"?
[Edit]: Habe nun alle DLLs durchleuchtet und bekam bei fast jeder der DLLs diese Meldungen :
http://puu.sh/2KCo9.png
Kann damit leider nicht viel anfangen.
MfG
D. Buchholz
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 1. Mai 2013 10:50
von Christian81
Natürlich das Executable... und das kenn ich auch nicht -> google
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 1. Mai 2013 10:59
von Dansel94
Selbes Ergebnis bei der exe. Beim ersten Fehler (=At least one module has an unresolved import due to a missing export function in an implicitly dependent module.) Sagen mehrere Windows Foren einfach ignorieren. Funktioniert trotzdem.
Beim zweiten Fehler (=: At least one delay-load dependency module was not found.) Finde ich nichts im Internet...
Ich kenne mich mit den Programm leider überhaupt nicht aus kann es was hiermit zu tun haben:
http://puu.sh/2KCII.png
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 1. Mai 2013 12:41
von veeman
Compiler das Programm am besten als Release! Und füge alle Qt Relevanten Bibliotheken ohne dem d am Ende in den Ordner.
Diese Bildbibliotheken mit einem d (zb Qt5Cored.dll) am ende sind eigentlich nur zum Debugging gedacht.
Wenn du dein Programm in der IDE läuft (Release), dann versuch mal dich mit dem Dependency Walker an den Prozess (deiner EXE) anzuhängen (attach process)
und schau dann welche Dateien verwendet werden. (Hab Dependency Walker noch nie verwendet, aber ich denke das programm sollte das können)
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 1. Mai 2013 13:04
von Dansel94
Habe das Programm als release Compiliert und die DLLs zugepackt inkl. dem platform Ordner und der qWindows.dll. Dependecy Walker meldet bei der exe wieder die gleichen Fehler. Wie kann ich denn den DW an den Prozess hängen? Finde diese Funktion nirgens.
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 1. Mai 2013 14:09
von Uwe
veeman hat geschrieben:Die Bibiotheken (DLLs) müssen in den selben Ordner wie die Application (EXE), anderst gehts nicht.
Müssen sie nicht - DLLs werden genau wie Executables über die PATH Variable gefunden.
Uwe
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 1. Mai 2013 14:29
von Dansel94
Über die PATH Variablen? Du meinst die Umgebungsvariablen von Windows oder? Wie füge ich diese denn dort ein`?
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 5. Mai 2013 11:46
von Dansel94
Kann mit denn einer erklären wie ich mit dem Dependence Walker umgehe? Also wie ich den z.B. an den Prozess der exe hänge...und das mit den PATH-Variablen bekomme ich so auch nicht hin.
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 5. Mai 2013 13:56
von Christian81
Was willst Du bei Dependency Walker wissen? Er zeigt Dir an, welche Dlls (und demnach auch welche Qt-Dlls) Du für dein Programm benötigst. Und wie man die PATH-Variable einstellt sagt Dir sicher google auch wenn das hier definitiv nicht nötig ist...
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 5. Mai 2013 14:04
von veeman
Uwe hat geschrieben:
Müssen sie nicht - DLLs werden genau wie Executables über die PATH Variable gefunden.
Müssen nicht, aber das ganze über PATH-Variable zu regeln würde ich nicht raten. Aus dem einfachen Grund das wenn man mehrere Qt-Anwendungen mit unterschiedlichen Versionen hat es da oftmals zu weiteren Problemen führt.
Wie man diese ändert (auf eigene gefahr):
google oder
youtube
Hab mal "Dependence Walker" mal ausprobiert, offensichtlich ist es nicht möglich sich da einfach so anzuhängen.
Deswegen hab ichs mal mit dem Process Explorer von Sysinternals gemacht (zu finden
hier):

Zu sehen ist im Unteren Bereich welche DLLs geladen sind und von wo diese geladen sind. Die Qt-Bibliotheken sind da zB unter H:/... zu finden.
Um die obige Ansicht zu erhalten muss unter View->Lower Panal View->DLLs eingestellt werden und um den Pfad dann unten zu sehen muss mit der rechten Maustaste auf die Spalten geklickt werden->Select Columns und da unter DLL einfach noch Path auswählen.
Re: Qt5 erstellte Programme außerhalb Qt's ausführen
Verfasst: 5. Mai 2013 21:39
von Dansel94
Habe mir das Programm mal geladen und geguckt welche DLLs das Programm braucht. Ich habe alle in dem Release Ordner drin. Bekomme immer noch den selben Fehler.
Die qWindows.dll ist im platform Ordner im Release Ordner.