[gelöst] Warum läuft mein Qt Programm nicht ohne .NET ?
[gelöst] Warum läuft mein Qt Programm nicht ohne .NET ?
Hallo,
ich hab mit Visual Studio ein Programm geschrieben, welches auf Qt4.2.0 und OpenCV 1.0rc1 aufsetzt. Irgendwelche .NET Bibliotheken verwende ich nicht. .NET ist aber zwangsläufig durch die Installation von Visual Studio 2005 Professional auf dem Rechner installiert.
Ich möchte nun das Programm auf einem anderen Rechner ausführen können, auf dem weder Qt noch OpenCV installiert sind. Das funktioniert auch prima, indem ich die benötigten Qt und OpenCV dll's mitliefere, allerdings nur solange auf dem Zielrechner das .NET Framework installiert ist. Auf einem frischen XP, also ohne alles, auch ohne .NET, läuft mein Programm dagegen nicht, aufgrund eines angeblichen Anwendungsfehlers, Neuinstallation der Anwendung wird als Tipp angegeben. Nach der Installation des .NET Frameworks auf dem frischen XP läuft mein Programm tadellos.
Wie kann das sein ? Ich bin die Projekteinstellungen meines Visual Studio Projekts durchgegangen, konnte nirgendwo irgendwas mit einer .NET Bibliothek in Verbindung bringen. Wenn ich wenigstens wüsste, wo ich anfangen könnte zu suchen, im Moment bin ich etwas ratlos.
Hat jemand eine Idee ?
ich hab mit Visual Studio ein Programm geschrieben, welches auf Qt4.2.0 und OpenCV 1.0rc1 aufsetzt. Irgendwelche .NET Bibliotheken verwende ich nicht. .NET ist aber zwangsläufig durch die Installation von Visual Studio 2005 Professional auf dem Rechner installiert.
Ich möchte nun das Programm auf einem anderen Rechner ausführen können, auf dem weder Qt noch OpenCV installiert sind. Das funktioniert auch prima, indem ich die benötigten Qt und OpenCV dll's mitliefere, allerdings nur solange auf dem Zielrechner das .NET Framework installiert ist. Auf einem frischen XP, also ohne alles, auch ohne .NET, läuft mein Programm dagegen nicht, aufgrund eines angeblichen Anwendungsfehlers, Neuinstallation der Anwendung wird als Tipp angegeben. Nach der Installation des .NET Frameworks auf dem frischen XP läuft mein Programm tadellos.
Wie kann das sein ? Ich bin die Projekteinstellungen meines Visual Studio Projekts durchgegangen, konnte nirgendwo irgendwas mit einer .NET Bibliothek in Verbindung bringen. Wenn ich wenigstens wüsste, wo ich anfangen könnte zu suchen, im Moment bin ich etwas ratlos.
Hat jemand eine Idee ?
Zuletzt geändert von René am 17. Oktober 2006 19:11, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Das kann doch nicht wahr sein. Was soll das denn ? Warum Microsoft so einen Unfug ?
Eine Lösung wäre vielleicht, zum Entwickeln VS2005 zu benutzen, weil es einfach leistungsstark ist und für jeden Release, der an andere verteilt wird, dann "mal eben schnell" das ganze durch das alte Visual Studio 6 zu jagen, welches beispielsweise in VMware oder so läuft, nur für diesen Zweck. Dann hätte man Qt4 Programme ohne .NET Abhängigkeit, so, wie man es eigentlich auch erwarten würde.
Spricht da etwas gegen ? Außer, dass es umständlich ist.
Vermutlich wird der modernere Compiler aus VS2005 für heutige CPU's besser optimierten Code erzeugen, als es Visual Studio 6 kann, oder ?
Eine Lösung wäre vielleicht, zum Entwickeln VS2005 zu benutzen, weil es einfach leistungsstark ist und für jeden Release, der an andere verteilt wird, dann "mal eben schnell" das ganze durch das alte Visual Studio 6 zu jagen, welches beispielsweise in VMware oder so läuft, nur für diesen Zweck. Dann hätte man Qt4 Programme ohne .NET Abhängigkeit, so, wie man es eigentlich auch erwarten würde.
Spricht da etwas gegen ? Außer, dass es umständlich ist.
Vermutlich wird der modernere Compiler aus VS2005 für heutige CPU's besser optimierten Code erzeugen, als es Visual Studio 6 kann, oder ?
Zuletzt geändert von René am 15. Oktober 2006 19:21, insgesamt 1-mal geändert.
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Hast du zufälliger weite ein Rechner mit win2k drauf? Dort sollte es ohne .net gehen. Denn ich fürchte es liegt an dem neuen Modus den MS ab XP eingeführt hat, wie das System Bibliothken findet. Wenn du in die Ereignisanzeige vom XP schaust, solltes du was finden, das er was im Assembly Cache nicht finden konnte. Denn die beiden DLL's von MS müssen genau dort hin. Nur kann man die da nicht einfach reinkopieren:(
Haste auch alle Manifestdatein mir kopiert?
Haste auch alle Manifestdatein mir kopiert?
Ich meine, Du brauchst noch die msvcm80.dll, sowie die Manifest-Datei.René hat geschrieben:@ BartSimpson
Ich weiß jetzt nicht genau, was du meinst, aber ich habe auch die Dateien
msvcp80.dll
msvcr80.dll
mitgeliefert, jene, die fehlen, wenn man kein .NET installiert hat. Aber es hilft nichts, das Qt Programm lässt sich nicht starten.
Sonst schau mal in den Dependency Walker (o.ä.).
So, ich habe mal das Paket vcredist_x86.exe, welches z.B. hier zu beziehen ist
http://www.microsoft.com/downloads/deta ... laylang=en
installiert auf dem Rechner mit frischem XP. Danach startet sofort mein Qt Programm und läuft einwandfrei.
Es werden lediglich aktuelle C++ Runtime Librarys installiert, das Paket ist gerade mal 2,5 MB groß, akzeptabel. Dennoch ist es natürlich nervig, wenn das Qt-Programm auf vielen verschiedenen Rechnern laufen soll. Vielleicht teste ich irgendwann nochmal das Ganze unter dem Betriebssystem Windows2000 oder der Entwicklungsumgebung Visual Studio 6 an. Im Moment bin ich erstmal mit dieser Lösung zufrieden. Hauptsache ist nämlich erstmal, dass ich nicht auf allen Rechnern .NET installieren muß, die das Qt-Programm ausführen wollen.
Durch das Paket vcredist_x86 benötige ich nun wirklich nur noch die Qt4 und OpenCV dll's im selben Verzeichnis wie die *.exe Datei. Die Microsoft C und C++ Runtime Libraries
msvcm80.dll
msvcp80.dll
msvcr80.dll
sind nun nicht mehr nötig. Diese liegen statdessen nach der Installation im WinSxS Ordner. Die Manifest Datei braucht man auch nicht (mehr).
http://www.microsoft.com/downloads/deta ... laylang=en
installiert auf dem Rechner mit frischem XP. Danach startet sofort mein Qt Programm und läuft einwandfrei.
Es werden lediglich aktuelle C++ Runtime Librarys installiert, das Paket ist gerade mal 2,5 MB groß, akzeptabel. Dennoch ist es natürlich nervig, wenn das Qt-Programm auf vielen verschiedenen Rechnern laufen soll. Vielleicht teste ich irgendwann nochmal das Ganze unter dem Betriebssystem Windows2000 oder der Entwicklungsumgebung Visual Studio 6 an. Im Moment bin ich erstmal mit dieser Lösung zufrieden. Hauptsache ist nämlich erstmal, dass ich nicht auf allen Rechnern .NET installieren muß, die das Qt-Programm ausführen wollen.
Durch das Paket vcredist_x86 benötige ich nun wirklich nur noch die Qt4 und OpenCV dll's im selben Verzeichnis wie die *.exe Datei. Die Microsoft C und C++ Runtime Libraries
msvcm80.dll
msvcp80.dll
msvcr80.dll
sind nun nicht mehr nötig. Diese liegen statdessen nach der Installation im WinSxS Ordner. Die Manifest Datei braucht man auch nicht (mehr).
Zuletzt geändert von René am 15. Oktober 2006 20:36, insgesamt 2-mal geändert.
Ich habe bereits die ganze Zeit mit dem Dependency Walker gearbeitet, um überhaupt an die benötigten dll's zu kommen, die msvcm80.dll taucht dabei nicht auf. Ich habe sie aber dennoch kopiert, die Manifest-Datei auch, hat alles nichts genützt.Sym hat geschrieben:Ich meine, Du brauchst noch die msvcm80.dll, sowie die Manifest-Datei.
Sonst schau mal in den Dependency Walker (o.ä.).
Hmm,René hat geschrieben:Ich habe bereits die ganze Zeit mit dem Dependency Walker gearbeitet, um überhaupt an die benötigten dll's zu kommen, die msvcm80.dll taucht dabei nicht auf. Ich habe sie aber dennoch kopiert, die Manifest-Datei auch, hat alles nichts genützt.Sym hat geschrieben:Ich meine, Du brauchst noch die msvcm80.dll, sowie die Manifest-Datei.
Sonst schau mal in den Dependency Walker (o.ä.).
ich habe meine Programme so auf einem WinXP zum Laufen bekommen. Und die Rechner hatten reingarnichts mit .Net am Hut.
That's Life
So, nun habe ich die beste Lösung. Man muss noch nicht mal mehr das vredist_x86 Paket installieren auf dem Zielrechner, sondern es müssen lediglich folgende Datein ins selbe Verzeichniss wie die *.exe Datei:
Microsoft.VC80.CRT.manifest
msvcm80.dll (für mein Projekt nicht nötig)
msvcp80.dll
msvcr80.dll
Ich hatte lediglich die dll Dateien im Verzeichnis und die Manifest Datei meines eigenen Projekts, nicht aber die Microsoft.VC80.CRT.manifest Datei, daher klappte das nicht. Nun bin ich also in der Lage Qt4 Projekte mit VS2005 kompiliert auf jedem beliebigen Rechner ohne Visual Studio oder .NET oder VS2005 C++ Runtime Librarys auszuführen. Das ist für viele sicherlich nix Neues, aber jeder fängt ja mal klein an
Danke an alle, die geholfen haben.
Für andere Newbies:
Zu finden sind die Dateien unter:
C:\Programme\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\
Microsoft.VC80.CRT.manifest
msvcm80.dll (für mein Projekt nicht nötig)
msvcp80.dll
msvcr80.dll
Ich hatte lediglich die dll Dateien im Verzeichnis und die Manifest Datei meines eigenen Projekts, nicht aber die Microsoft.VC80.CRT.manifest Datei, daher klappte das nicht. Nun bin ich also in der Lage Qt4 Projekte mit VS2005 kompiliert auf jedem beliebigen Rechner ohne Visual Studio oder .NET oder VS2005 C++ Runtime Librarys auszuführen. Das ist für viele sicherlich nix Neues, aber jeder fängt ja mal klein an
Danke an alle, die geholfen haben.
Für andere Newbies:
Zu finden sind die Dateien unter:
C:\Programme\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\