In Foren ist einer der häufigsten Fragen:
“Ich kopiere meine (simple) C++ Anwendung auf einen anderen Rechner, aber dort geht diese nicht! Es kommt immer ein Fehler wie ‘Anwendungskonfiguration falsch’ oder ‘SxS Error’. Wie kann ich meine Anwendung dort laufen lassen?”
Das Problem liegt daran, dass per Default gegen die DLL-Version der CRT (C-Runtime) gelinkt wird. Für diie Lösung gibt es nun zwei Antworten:
1. Du musst das passende vcredist_x86.exe auf dem Zielrechner installieren oder mit Deinem Installer die Merge-Modules installieren
Diese Option ist aber meistens zu aufwendig für eine einfache Anwendung. Deshalb rate ich immer zu der zweiten (und aus meiner Sicht besten Lösung):
2. Du musst Deine Anwendung statisch gegen die CRT linken, dann werden die CRT-DLLs nicht benötig und somit gibt es auch nicht den obigen Fehler.
Und bis man das nun wieder jedem erklärt hat, wie man das umstellt habe ich jetzt einen kleinen Screen-Cast (2:12 min) gemacht, der dies schön zeigt:
http://www.kalmbach-software.de/screencasts/VC2008EE-StaticLinkCRT/
PS: Dies geht nicht wenn die EXE/DLL .NET verwendet…
Dankeschön!
Nach stundenlanger Recherche endlich ein Programmierer der weiß wovon er redet und der konkrete Lösungsvorschläge nennen kann!
Respekt!
Und innerhalb von 2:12 min war mein Problem gelöst.
Dankeschön!
Vielen Dank, gute Arbeit.
Das ist doch ein Problem, welches eigentlich jeden betrifft, warum muss man immer erst stundenlang suchen bis jemand kurz und knapp Klartext redet.
Die Anleitung ist gut,
allerdings verursacht die Exe jetzt ein Problem beim start und ‘muss beendet werden’. Es funktioniert nur wenn ich in ALLEN Konfigurationen Multithreaded-Debug-DLL verwende, keine der anderen Möglichkeiten funktioniert.
Der Debugger zeit auf folgende Funktion:
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
/* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
(_Reserved);
_debugger_hook_dummy = 0;
}
bzw auf den _debugger_hook_dummy .
Ich habe schon einige Zeit nach einer Lösung gesucht aber nichts gefunden, darum versuche ich jetzt hier mein Glück.
Nutze VS2005, MFC nutze ich nicht.
Es ist ein OpenGL Programm welches auch GLUT nutzt, könnte es sein dass die glut.dll mit diesem Problem zu tun hat?
Würde mich riesig freuen wenn mir jemand helfen kann.
Vielen Dank, hat mein Problem auf Anhieb gelöst. Erst recht in den Foren werden sehr oft zu diesem Problem Themen erstellt.
Gute Arbeit!
Hat mein Problem auch sofort gelöst.
Vielen Dank dafür.
Pingback: Dubuggen unter Vista | hilpers
Hallo
Eine sehr schöne Erklärung und ich war mich rschon sicher, dass es funktioniert. Allerdings erhalte ich nun
Command line error D8016 : ‘/MT’ and ‘/clr’ command-line options are incompatible
Es handelt sich um eine Konsolenanwendung
Vielleicht gibt es auch hierzu noch eine Projekt einstellung:)?
Beste Grüsse, ansonsten eine top Beschreibung!!
Geri
Hab ich das vergessen zu schreiben: .NET (/clr) und statisches Linken schliessen sich aus.
Hast Du mit *Absicht* eine .NET-Anwendung erstellt?
Ich habe eine kleine Windows-Forms Anwendung mit VSC++ 2008 exp erstellt. Leider läuft sie nur auf dem Entwicklungspc. Die Anwendung besitzt die SerialPort Komponente. Welche Möglichkeiten habe ich, die Anwendung auf allen PC anwendbar zu machen? Bitte berücksichtigt in der Antwort das ich Einsteiger bin. Danke schon mal im Vorraus.
Tobi
Hallo,
Du musst auf dem Zielsytem das .NET-Framework installieren und auch noch das vcredist_x86.exe
Siehe auch:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-143003.html
Vielen Dank für die tolle Anleitung! Hatte ja schon befürchtet, dass ich bei jedem User die “vcredist_x86.exe” installieren muss.
Sehr schön ich habe Stunden lang nach einer Lösung gesucht und hier ist sie (sehr gut erklärt)
Danke, dies hat mein Problem gelöst (zumindest dieses eine..)
Schade jetzt bekomme ich die Fehler:
uafxcw.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) ist bereits in LIBCMT.lib(new.obj) definiert.
1>uafxcw.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) ist bereits in LIBCMT.lib(delete.obj) definiert.
1>uafxcw.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new[](unsigned int)” (??_U@YAPAXI@Z) ist bereits in libcpmt.lib(newaop.obj) definiert.
1>uafxcw.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete[](void *)” (??_V@YAXPAX@Z) ist bereits in LIBCMT.lib(delete2.obj) definiert.
Alle Deine Libs müssen natürlich auch diese Einstellung haben!
Pingback: Jochen Kalmbach’s Blog » Blog Archive » C++/CLI Programme auf einem anderen Rechner ausführen
Lieber Jochen,
ich habe fast keine Ahnung von Programmierung, wollte mich nur etwas tiefer informieren, weil die Steuererklärung mit Elster nicht lief und traf dabei auf Deinen Blog. Hervorragend gemacht, grosses Kompliment an
Dich. Ich habe jetzt wenigstens eine vage Vorstellung von den Zusammenhängen.
Vielen Dank und frohe Festtage
Peter
perfekt. mehr fällt ma dazu garned ein!!
Schöne kurz und knackige Erklärung!
HILFE ich benutze seit kurzem visual c++ 2008 kenne mich auch etwas in der c++ sprache aus und hab ein einfaches programm geschrieben zum test auf meinem pc gings aber auf einem anderen nicht da kam diese side by side ding hab jetzt alles gemacht wie in deinem film aber jetzt läufts nichtmal bei mir es tauchen in visual viele fehler auf und das programm öffnet sich nicht mehr bitte um hilfe
die hauptsächlichen fehler sehen so aus vllt hilfts dir ja =
Fehler 3 error C2871: ‘Reflection’: Es ist kein Namespace mit diesem Namen vorhanden
Fehler 6 error C2653: ‘System’: Keine Klasse oder Namespace
Fehler 13 error C2337: “AssemblyCompanyAttribute”: Attribut wurde nicht gefunden.
Du machst kein C/C++ sondern C++/CLI! Hier kann man nicht statisch linekn! Du musst die vcredist und das .NET-Framework auf dem Zielrechner installieren! Siehe:
http://blog.kalmbach-software.de/de/2009/12/17/ccli-programme-auf-einem-anderen-rechner-ausfuhren/
wie kann ich es dann machen das ich mit c/c++ schreibe statt mit C++/CLI
denn ich würde sehr gern das man nichts weiter auf einem anderen rechner installieren muss
lg new
Das geht, indem Du ein Win32-Projekt und *kein* CLR/.NET-projekt anlegst!
Bei der Express-Version ist aber keine Projektvorlage mit GUI dabei; da benötigst Du min. die Standard-Version… oder ein anderes Framework… siehe auch:
http://www.c-plusplus.de/forum/143003
vielen dank
vorallem für die schnelle hilfe
werde mir das glei mal ansehen hoffe es klappt
hab da noch eine frage ist es möglich eine 2 form in der ersten zu öffnen also ich mein z.b. das man bei der 1 form (mein hauptmenü) auf ein unterpunkt geht und sich dann die 2 form (ein bild) statt als neues fenster in dem 1 öffnet
lg new
Weitere Fragen solltest Du in einem Forum stelle… z.B. hier:
http://www.c-plusplus.de/forum/f58
Hallo!
Der Link zum Video funktioniert leider nicht mehr.
http://www.kalmbach-software.de/screencasts/VC2008EE-StaticLinkCRT/
Gruß Lars
Danke! habs korrigiert… im Zuge von Sicherheitsmaßnahmen ist das rausgefallen…