Ausführen einer mit VS2013 erstellten exe scheitert

OP #3950796
Moin,

ich habe mit VS 2013 eine C++-Konsolenanwendung geschrieben. Diese 
funktioniert auch soweit. Mein Problem ist es, wenn ich die .exe auf 
einem Rechner ausführen möchte, auf dem nicht VS 2013 installiert ist 
klappt dies nicht. Zwei dlls fehlen; ich hatte versucht die beiden dlls 
per Hand in System32 zu kopieren, jedoch startet das Programm dann immer 
noch nicht.

Gibt es eine Möglichkeit, Programme in VS zu schreiben, die auch auf 
Rechnern ohne die Entwicklungsumgebung ohne Probleme funktionieren?

Gruß
Gast
> Gibt es eine Möglichkeit, Programme in VS zu schreiben, die auch auf
> Rechnern ohne die Entwicklungsumgebung ohne Probleme funktionieren?

Ja, aber das willst Du nicht. Installier auf dem Zielsystem die 
vcredist, die kommt zusamment mit dem VStudio.
Gast
> welche Version davon genau?

Die, die Dein VStudio mitbringt. Ob x86 oder amd64 musst Du dann selber 
entscheiden. Und nicht vergessen, ein Release zu bauen, 
Debug-Executables sind ohne VStudio notorisch schwierig in Betrieb zu 
nehmen.
Gast
> Mit VS kann ich ja auch Setups erstellen, gibt es eine Möglichkeit die
> vcredist darin zu integrieren, sodass sie zusammen mit der
> entsprechenden Anwendung installiert werden?

Ja, das ist die einfachste Methode. Einfach als zusätzliches Paket 
hinzufügen.
Persönliche Seite
g457 schrieb:
> Ja, aber das willst Du nicht.

Wieso sollte er das nicht wollen? Das ist eine simple 
Compiler-Einstellung, und man muss nicht verschiedene von MS identisch 
benannte vcredist-Varianten auseinanderhalten.

Im "Solution Explorer" Rechtsklick auf das Projekt, dann "Properties" 
aufrufen.

Configuration Properties->C/C++->Code Generation

Und hier unter "Runtime Library" die /nicht/-DLL-Varianten auswählen.

(also /MT bzw. /MTd statt /MD bzw. /MDd).

Fertig ist die Laube.

Der "Nachteil", daß das so erzeugte Binary geringfügig größer ist als 
ein von vcredist abhängiges, wird durch die erheblich einfacherer 
Handhabung mehr als kompensiert.
Gast
> Wie mache ich das ganz genau, ich habe mir die beiden Pakete als exe von
> der MS Seite heruntergeladen.

Das ist der oben erwähnte erste Weg. Dieses Paket (in ∗genau∗ der 
richtigen Version) auf dem Zielsystem installieren.

Alternativ über den Installer: In den Eigenschaften des 
Installer-Projekts auf 'Prerequisites' (bitte ggf. adäquat übersetzen..) 
und dort die Runtime hinzufügen. So oder so ähnlich müsste es 
funktionieren, ist schon eine Weile her dass ich das das letzte mal 
gemacht hab.
OP
Ich habe mal beide Varianten ausprobiert. Am einfachsten ist es, meiner 
Meinung nach, die Compiler-Einstellungen zu verändern.
Ich habe die Pakete in den Setup integrieren und installieren können, 
hat trotzdem nicht funktioniert. Ich tippe auf das falsche Paket.

Danke für die hilfreichen Tipps, die zur Problemlösung beigetragen haben
Gast
Microsoft selbst rät von statischem linken ab:
"Prefer dynamic linking over static linking
It is not recommended to redistribute C/C++ applications that statically 
link to Visual C++ libraries. It is often mistakenly assumed that by 
statically linking your program to Visual C++ libraries it is possible 
to significantly improve the performance of an application. However the 
impact on performance of dynamically loading Visual C++ libraries is 
insignificant in almost all cases. Furthermore, static linking does not 
allow for servicing the application and its dependent libraries by 
either the application's author or Microsoft. For example, consider an 
application that is statically linked to a particular library, running 
on a client computer with a new version of this library. The application 
still uses code from the previous version of this library, and does not 
benefit from library improvements, such as security enhancements. 
Authors of C/C++ applications are strongly advised to think through the 
servicing scenario before deciding to statically link to dependent 
libraries, and use dynamic linking whenever possible."
http://msdn.microsoft.com/en-us/library/ms235316(v=vs.80).aspx

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.