Qt5.02 Microsoft Visual C++ Runtime Library error
-
Hallo,
mit einem Kleinprojekt, entwickelt mit Qt Creator unter Win-Vista(64), stoße ich auf Schwierigkeiten bei der Anwendung außerhalb der Entwicklungsumgebung. Unter Creator funktioniert alles, aber in einem externen Ordner, sowie auf anderen Systemen (Deployment auf: XP, Win7) startet das Programm nicht.
Meines Erachtens habe ich alle erforderlichen DLLs in das Ausführungsverzeichnis geladen. Fehlende DLLs werden zudem beim Startversuch angezeigt, sodass man sie gezielt nachladen kann.
Jetzt aber endet jeder Start mit dem PopUp:"Microsoft Visual C++ Runtime Library
This application has requested the Runtime to terminate in an unusual way.
Please contact the application's support team for more information."Die Suche im Forum brachte mich auf den folgenden Link (s.u.), in dem offenbar die gleiche Problematik behandelt wird, allerdings ohne wirkliches Ergebnis.
http://qt-project.org/forums/viewthread/27061Zuvor hatte ich alles unter Qt5.01 entwickelt. Hiermit funktionierte das "Deployment" in einem externen Ordner auf dem gleichen Rechner bzw. System (also nicht unter QtCreator), jedoch nicht auf einem anderen Rechner unter Win7(32).
Ich habe dann Qt5.02 installiert wegen einiger Ungereimtheiten, die z.T. auch verschwunden sind, aber nun kann ich nicht einmal auf dem Entwicklungs-Rechner eine lauffähige Version starten, außer unter Creator.
Ich habe auch den Versuch gemacht, Qt5.02 auf einer virtuellen Maschine unter XP zu installieren: gleiches Ergebnis. Das Programm funktioniert unter QtCreator, aber nicht als dynamisch gelinkte Version aus einem externen Ordner heraus.
Hat jemand in diesem Forum eine Idee hierzu?
Ich habe sehr geringe Erfahrung/Kenntnisse bei der Programmierung mit Qt. Vielleicht mache ich etwas grundfalsch. Nur leider finde ich keinen weiterführenden Hinweis. Danke vorab. -
Zur Richtigstellung: dass ein Programm unter Win7(32) nicht mit Vista(64)-DLLs funktioniert, kann ich noch nachvollziehen. Allerdings gelingt es mir auf den Entwicklungssystemen (eine Installation unter XP-32 und eine unter Vista-64) nicht, die jeweilige Version außerhalb der Creator-Umgebung zum Laufen zu bringen.
-
Dies ist mit Sicherheit eine Vorgehensweise. Allerdings ergibt sich meist ein Problem sobald verschiedene Versionen von Qt (und auch eventuell andere dlls) auf dem Computer vorhanden sind. Ohne das ich deinen Ausführungen direkt folgen konnte, würde ich vermuten, dass eine Mischung von 32- und 64-bit-dlls vorliegt. Mir ist es schon mehrfach vorgekommen, dass die Applikation dlls von irgendwoher geladen hat.
Um dies nachzuvollziehen verwendet man am Besten den "dependency walker":http://www.dependencywalker.com/ Eine Anleitung ist "im wiki":http://qt-project.org/wiki/Show_library_dependencies#aea23489ce3aa9b6406ebb28e0cda430 auf Englisch zu finden. Der dependency walker zeigt auch die Compile-Version der dll (32- oder 64-bit) an. -
Schnelle Antwort. Danke erst einmal.
Das Programm ist entwickelt und getestet mit Qt5.02, nachdem ich unter Qt5.01 verschiedene Probleme hatte, die mir nicht lösbar erschienen. Qt5.01 habe ich deinstalliert, also nur eine Qt-Version auf dem Rechner (Vista-64).
Allerdings konnte ich zuvor unter Qt5.01 das gleiche Programm kompilieren, in ein anderes Verzeichnis kopieren und dort nach Ergänzung der entsprechenden DLLs als dynamisch gelinkte ~.exe ausführen.
Dies gelingt unter Qt5.02 nicht mehr. Nur innerhalb der Creator-Umgebung funktioniert es, die "Deployment"-Kopie als eigenständiges Programm führt zu dem oben genannten Fehler.
Ich habe Qt5.02 auch noch auf einer virtuellen Maschine installiert (XP32), hier passiert das gleiche.
Wenn ich jetzt das komplette Anwendungsverzeichnis (dynamisch gelinktes Deployment) vom XP32-Rechner auf einen andren Rechner mit Win7(32) kopiere, funktioniert es plötzlich ohne Fehlermeldung.
Das ist mir rätselhaft und verunsichert mich. Gibt es hierzu irgendwo etwas nachzulesen? -
Mit welchem Compiler arbeitest du?
Wie hast Du die Version heruntergeladen und installiert?
Es erscheint mir auch unlogisch, dass im Creator alles laufen soll und ausserhalb nicht. Hast Du mit dem dependency walker mal kontrolliert, woher die dlls geladen werden? -
Compiler: mingw47_32, heruntergeladen mit dem "binary Package": >Qt 5.0.2 for Windows 32-bit (MinGW 4.7, 650 MB)< von: http://qt-project.org/downloads.
Unter QtCreator erhalte ich mit "Alles erstellen" keine Fehlermeldungen über Syntaxfehler oder fehlende Includes oder dergleichen. Für einen Zugriff auf den "native socket descriptor" musste ich WS2_32.lib einbinden, was auch funktioniert.
Das Projekt wird ohne Fehlermeldung kompiliert und funtioniert bei Aufruf von "Ausführen" im Creator.Ich habe die .exe-Datei meines Programms in ein anderes Verzeichnis außerhalb der Entwicklungsumgebung kopiert und alle erforderlichen DLLs dazu geladen. Das Ergebnis beim Start ist nun der Beschriebene Fehler. In meinem ersten Beitrag hierzu habe ich auch einen Thread-Link angegeben, in dem das entssprechende Popup gezeigt wird. Meines Erachtens wird dort der gleiche Fehler beschrieben, aber keine Lösung geboten.
Der Dependency Walker gibt Fehlermeldungen und Warnungen aus:
bq. Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: Modules with different CPU types were found.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.Fast alle nativen WIN-DLLs stammen aus:
c:\windows\system32\
bis auf zwei aus:
c:\windows\winsxs\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.6002.18581_none_56abd97bb593eaca
alle sind gekennzeichnet mit dem CPU-Typ x64, während die aus "C:\Qt\Qt5.0.2\5.0.2\mingw47_32\bin" kopierten DLLs den Vermerk für die x86er CPU tragen
IESHIMS.DLL wurde nicht gefunden, befindet sich in C:\Program Files (x86)\Internet ExplorerIch weiß nur nicht, wie ich diese Probelme auflösen kann. Gibt es Beschreibungen, wie ich mein Projekt z.B. unter Vista-64 für andere Win-Versionen erstellen kann? Muss ich hierfür andere MS-SDKs einbinden?
Vielen Dank nochmal für die Hilfsbereitschaft. -
Du hast den MinGW 32 bit mit der SDK installiert. Damit sollte auch Qt dieser SDK als 32 bit compiliert sein. Die ausgewählte Toolchain im creator sollte auf die richtige Version zeigen. Dort kannst Du den Pfad zu den dlls nochmals überprüfen. Dieser Pfad sollte auch beim Check mit dem "dependency walker" auftauchen. Ansonsten liegt etwas Gemischtes vor.
[quote author="bbbill" date="1367614869"]
"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\bin" kopierten DLLs den Vermerk für die x86er CPU tragen
[/quote]
Da Du den 32 bit MinGW verwendest, sollte das passen.[quote author="bbbill" date="1367614869"]
Fast alle nativen WIN-DLLs stammen aus:
c:\windows\system32\
bis auf zwei aus:
c:\windows\winsxs\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.0.6002.18581_none_56abd97bb593eaca
alle sind gekennzeichnet mit dem CPU-Typ x64,
[/quote]
Wenigstens die Qt dlls sollten keinen x64-Vermerk haben. Diese sollten ja ebenfalls für 32 bit compilert sein.Habe gerade nochmals bei mir nachgeschaut. Ich verwende win7 64 bit, MinGW 64 bit und eine selbstkompilierte Qt 4.8.4. Dort werden nur die Qt dlls und die MinGW dlls mit x64 gekennzeichnet.
-
Da ich mich aufgrund meines Unverständnisses der Abläufe aufs Probieren verlegt habe, schildere ich kurz einige Resultate:
-
Unter Vista-64 funktioniert mein Programm lediglich innerhalb der QtCreator-Umgebung, nicht aber aus einem separaten Ordner trotz (scheinbar) aller vorhandenen bzw. erforderlichen DLLs.
-
Auf meiner virtuellen Maschine, XP-32, funktioniert beides, also sowohl innerhalb der Qt5.02Creator-Umgebung als auch in einem externen Verzeichnis (nach Ergänzungen mithilfe von Dep.Walker) startet des Programm und funktioniert offenbar auch.
In dem externen Ordner kommt bei Programmstart zuerst eine Fehlermeldung (fehlende libapr_tsvn.dll), nach quittieren derselben ist alles ok, scheinbar.
Ich habe die "libapr_tsvn.dll" aus einem Tortoise-Verzeichnis rüberkopiert, danach kam eine Meldung, dass diese DLL nicht windows-konform sei. Auch in diesem Fall funktioniert scheinbar alles nach Bestätigung mit OK.
Diese unter XP-32 erzeugte Version läuft auch auf anderen Rechnern: Win7-32, und XP-32. -
Jetzt kam ich auf die Idee, den unter XP-32 erstellten externen Anwendungsorder meines Programms mit allen zugehörigen DLLs nach Vista-64 zu kopieren: alles funktioniert. Auch bezüglich der "libapr_tsvn.dll" kommt keine Fehlermeldung.
Da ich ja mit einer 32-Bit-Version von Qt5.02 arbeite, kann ich mich mit diesem Ergebnis anfreunden, wenn ich die Zusammenhänge auch nicht verstehe.
Danke für die Unterstützung, koahnig und den Hinweis auf Dep.Walker.
Gibt es irgendwo Tips, ob und wie ich für ein Win2000er System compilieren kann? Andere SDKs einbinden? Und wenn ja, wie? -
-
Deine Schilderung liest sich interessant. Allerdings sind da einige Punkte, die zu denken geben. Auch wenn die Konstellation zu laufen scheint, muss das nicht stabil sein. Vor allem die Fehlermeldungen sollten zu denken geben.
Aus der Distanz ist es schwer, die Sache richtig zu beurteilen. Aber die Verwendung von einer Tortoise-SVN dll erscheint nicht gerade sinnvoll. Aus meiner Sicht hast Du Probleme wegen einer undefinierten Mischung aus dlls aus verschiedenen Quellen. Dlls sollten aus meiner Sicht nur aus dem Qt-lib-Ordner, aus dem MinGW-Odner oder aus dem normalen Windows-System-Ordner kommen. Am Besten kann man dies beim Starten der Applicaktion von einem Command-Prompt testen. Dazu die PATH-Settings löschen. Sonst findet die Applikation über den den PATH irgendwo etwas anscheinend und lädt es. Dies könnte die Tortoise-dll erklären.
Windows 2000 ist nun wirklich nicht mehr frisch. Eine spezielle SDK wird da wohl nirgends aufzutreiben sein. Aber vielleicht sehe ich dies auch etwas zu pessimistisch. Viel Glück auf alle Fälle.
-
Die Empfehlung, die PATH-Settings zu löschen, vertehe ich nicht.
Wenn ich unter den Projekteinstellungen den Inhalt der PATH-Variable lösche, funktioniert der Build-Prozess nicht mehr. Wenn ich lediglich das daraus lösche, was über die Mingw-, Win/Sys32-, und QT-Einträge hinaussgeht, läuft der Buildprozess durch, ich kann eine Release-Version erstellen, aber beim Programmstart aus dem externen (Deployment-)Ordner kommt wieder die Meldung von der fehlenden oder fehlerhaften "libapr_tsvn.dll". (Lt. Googlen stammt die von Apache, auf meinem Rechner finde ich sie unter Tortoise...)
Dennoch funktioniert das Programm.
Wenn ich den kompletten unter (VMWare-)XP-32 erstellten Ordner nach Vista-64 kopiere, läuft alles einwandfrei. Die o.gen. lib wird nicht vermisst, ich kann sie ohne irgendwelche Folgen aus dem Ordner löschen. Das gleiche gilt für andrere Win-32-Rechner mit XP und höher in meinem Umfeld. Dies alles ist mir rätselhaft.
Gibt es hierzu Literatur oder Links, die etwas Licht in dieses Dunkel bringen?Win2000 ist nicht von zentaler Wichtigkeit für mich. Wäre nur schön gewesen, wenn es darauf auch funtionierte, da ich mit solchen Systemen zu tun habe.