Seite 1 von 3
Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Do Jul 02, 2009 10:07 pm
von nufan
Wieder mal was Windows-spezifisches
Folgendes Problem:
Ich habe ein C++-Programm geschrieben welches auch SDL verwendet. Also vom Code her ist das Programm systemunabhängig. g++ auf Ubuntu und BSD macht überhaupt keine Probleme. Das Programm wird mit MS Visual C++ 2008 kompiliert und funktioniert auch problemlos unter Vista (nach stundenlangem Herumprobieren...). Versuche ich es jedoch auf XP ohne Visual oder auf Vista ohne Visual kann das Programm nicht gestartet werden. Dabei habe ich den kompletten Projektordner kopiert. Die DLLs und alle anderen vom Programm benötigten Dateien liegen im Verzeichnis der .exe.
Windows behauptet jedoch, dass die Anwendungskonfiguration nicht korrekt ist und ich die Anwendung neu installieren soll (obwohl es ein einfaches Programm und keins mit Setup oder so ist). Die SDL-DLLs hab ich natürlich alle mitgegeben.
Ich schätze, dass das Problem durch den fehlenden Compiler (oder besser gesagt dessen fehlende Bibliotheken) verursacht wird. Ich hab schon ne ganze Weile versucht die Runtime-Libs (msvcr etc.) mitzugeben, aber das hat auch nichts gebracht. Wahrscheinlich habe ich die falschen oder nicht alle kopiert.
Kann mir jemand sagen welche DLLs ich mitgeben muss bzw. wo sonst der Fehler ist? Kann ich wenigstens die Visual-DLLs statisch linken? SDL macht ja keine Probleme.
Besten Dank im Voraus.

Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Do Jul 02, 2009 10:50 pm
von Dirty Oerti
Also soweit ich weiß braucht man auf dem Windows, auf dem die Programme, die mit Visual compiliert wurden laufen sollen die sogenannten Visual C++ Executables (oder Redistribut...?)
Sowas in der Art auf jedenfall. Wie's genau heißt weiß ich jetzt nicht, wenn du aber nach OpenSceneGraph suchst und dort dann nach der Installationsanleitung für Windows kommst du daran nicht vorbei

Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Do Jul 02, 2009 11:05 pm
von Xin
dani93 hat geschrieben:Kann mir jemand sagen welche DLLs ich mitgeben muss bzw. wo sonst der Fehler ist? Kann ich wenigstens die Visual-DLLs statisch linken? SDL macht ja keine Probleme.
Du kannst von Microsoft den "Dependency Walker" herunterladen. Der sagt Dir welche DLLs Deine EXE benötigt und welche DLLs die DLLs benötigen. Und welche davon nicht gefunden werden.
Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Fr Jul 03, 2009 12:22 pm
von nufan
Dirty Oerti hat geschrieben:Wie's genau heißt weiß ich jetzt nicht, wenn du aber nach OpenSceneGraph suchst und dort dann nach der Installationsanleitung für Windows kommst du daran nicht vorbei

Da gibts einige Anleitungen. Ich nehme an du meinst die von der Homepage
hier. Über mein Problem finde ich dort jedoch nichts.
Xin hat geschrieben:Du kannst von Microsoft den "Dependency Walker" herunterladen. Der sagt Dir welche DLLs Deine EXE benötigt und welche DLLs die DLLs benötigen. Und welche davon nicht gefunden werden.
Wenn ich mein Programm damit starten will bekomme ich folgenden Fehler:
Code: Alles auswählen
Error: The Side-by-Side configuration information for "c:\...\MEINPROGRAMM.EXE" contains errors. Diese Anwendung konnte nicht gestartet werden, weil die Anwenungskonfiguration nicht korrekt ist. Zur Problembehebung sollten Sie die Anwendung neu installieren (14001).
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Ich habe nach allen DLLs und deren Abhängigkeiten gesucht und die sind auch alle in D:\WINDOWS\System32\. Außer 2 (msvcp90d.dll, msvcr90d.dll) welche ich von Vista kopiert habe. Kann es sein, dass XP einfach nicht mit den Vista-DLLs umgehen kann?
Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Fr Jul 03, 2009 12:36 pm
von Xin
dani93 hat geschrieben:Wenn ich mein Programm damit starten will bekomme ich folgenden Fehler:
Code: Alles auswählen
Error: The Side-by-Side configuration information for "c:\...\MEINPROGRAMM.EXE" contains errors. Diese Anwendung konnte nicht gestartet werden, weil die Anwenungskonfiguration nicht korrekt ist. Zur Problembehebung sollten Sie die Anwendung neu installieren (14001).
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Moment.... das war eine böse Sache... da gibt's bei Google nicht viel zu, aber ich hatte den Fehler letztes Jahr auch und mich zu Tode gesucht.
Aber die Lösung war afair einfach: Das Manifest durfte nicht eingefügt werden.
Hier war das Problem, dass eine XP-Lib nicht auf Win2000 lief, wenn ich mich recht entsinne.
dani93 hat geschrieben:Ich habe nach allen DLLs und deren Abhängigkeiten gesucht und die sind auch alle in D:\WINDOWS\System32\. Außer 2 (msvcp90d.dll, msvcr90d.dll) welche ich von Vista kopiert habe.
Du darfst diese DLLs iirc nicht weitergeben.
dani93 hat geschrieben:Kann es sein, dass XP einfach nicht mit den Vista-DLLs umgehen kann?
Das kann sein, z.B. wenn diese Vista-Abhängigkeiten haben, aber das glaube ich bei den beiden DLLs nicht.
Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Fr Jul 03, 2009 12:56 pm
von Dirty Oerti
Tag
Mir ging es hierrum:
http://www.openscenegraph.org/projects/ ... ioBinaries
Diese Visual C++ runtime Bibliotheken brauchst du nämlich, um irgendein mit Visual C++ kompiliertes Programm ausführen zu können

So zumindest meine Info^^
Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Fr Jul 03, 2009 1:26 pm
von nufan
Xin hat geschrieben:Aber die Lösung war afair einfach: Das Manifest durfte nicht eingefügt werden.
Löschen des Manifestes bringt auch nichts.
Xin hat geschrieben:Du darfst diese DLLs iirc nicht weitergeben.
Das würde ich nicht sagen. Schließlich sind diese DLLs auch in der freien Express Edition dabei. Auch im Ordner "redist", der eigentlich genau mein Problem lösen sollte sind diese Dateien und ein Manifest. Ich habs schon mit den Dateien aus dem "redist"-Ordner versucht, mal mit Manifest, mal ohne. Immer noch mit der gleichen Fehlermeldung.
Aber dann muss doch jeder Benutzer dieses Programm installieren. Und genau das will ich verhindern ^^
Ich will eine .exe bei der ein Doppelklick zum Starten reicht.
Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Fr Jul 03, 2009 1:41 pm
von Dirty Oerti
The Visual Studio binaries require that you have either Visual Studio itself installed (the same version as the downloaded binaries) or the Visual C++ runtime for the appropriate platform/compiler combination.
Das hört sich für mich eben so an, als ob das nicht gehen würde. Außer du linkst sie statisch mit ein...
http://board.gulli.com/thread/799332-vi ... ch-linken/
... was aber anscheinend nicht so wirklich funktioniert..?
Oder ganz ohne:
http://www.ddj.com/windows/184416623
Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Fr Jul 03, 2009 2:45 pm
von Xin
dani93 hat geschrieben:Xin hat geschrieben:Aber die Lösung war afair einfach: Das Manifest durfte nicht eingefügt werden.
Löschen des Manifestes bringt auch nichts.
Eigenschaften -> Manifesttool -> Eingabe und Ausgabe -> Manifest einbetten => Nein.
Das war es - glaube ich.
dani93 hat geschrieben:Aber dann muss doch jeder Benutzer dieses Programm installieren. Und genau das will ich verhindern ^^
Ich will eine .exe bei der ein Doppelklick zum Starten reicht.
Du darfst ausschließlich Funktionalität verwenden, die Du statisch eingebunden hast, ansonsten benötigst Du DLLs in Pfaden, die Deine Anwendungen finden kann - dafür müsste man sie wieder installieren.
Re: Mit Visual C++ kompilierte Programme weitergeben
Verfasst: Fr Jul 03, 2009 5:30 pm
von nufan
Ich gebs auf
Auch das ändern der Manifesteinstellungen hat nix gebracht.
Hab dann eben Mingw genommen, ist auch viel einfacher, da ich nicht jedes Mal ein (riesiges) Projekt erstellen muss
Und einen Thread zum Weitergeben von Mingw-Programmen hatten wir hier ja schon
Sollte es jemand hinbekommen wäre das einen FAQ-Eintrag wert.