Runtime umgebungen unter Windows



  • Hallo!

    Ich hätte mal eine grundsätzliche Frage zur C++ Programmierung unter Windows.
    Man kann ja grundsätzlich 2 Verschiedene Arten von Anwendungen mit Visual C++ unterscheiden : einmal Anwendungen die mit dem .NET Framework laufen und dann ja „native“ C++ Anwendungen die mit ANSI C++ erstellt werden. Dass nun .NET Anwendungen auch danach das .NET Framework zum laufen brauchen ist klar. Die nativen C++ Anwendungen laufen ja aber (so wird es zumindest in den Lehrbüchern erklärt) direkt unter Windows und müßten dem entsprechen ja gar nicht weiter brauchen. Nun fällt mir aber auf, daß Anwendungen die z.B. mit Visual C++ 2010 erstellt wurden nun eben auch das Visual C++ Runtime Environment brauchen. Was mich jetzt interessieren würde ist wie man Anwendungen erstellt die tatsächlich gar nichts weiter benötigen? Nehmen wir mal als Beispiel Windows XP (hab ich jetzt bewußt gewählt). Viele vorinstallierte Programme (der Taschenrechner oder der Editor uvm.) sind ja bekanntlicherweise in C++ geschrieben. Nach einer neuinstallation sind ja keinerlei C++ Runtime Environments vorhanden und die o.g. Programme laufen ja aber trotzdem… Wie kommt das und was müsset ich den für eine Entwicklungumgebung nehmen um Programme zu erstellen die nichts weiter brauchen?



  • Du musst die Runtime statisch linken.
    Bei VS geht das unter Properties -> C/C++ -> Code Generation. Da müsstest du die „runtime library“ von „Multi-threaded DLL (/MD)“ auf „Multi-threaded (/MT)“ wechseln.
    Für die Debugversion (falls das überhaupt erforderlich sein sollte) dann ebenso (/MDd -> /MTd).



  • Ja und dann läuft das Programm ohne die entsprechende Runtime zu benötigen ? Es werden dabei also (wenn ich das jetzt richtig verstanden habe) die entsprechenden Komponenten in die exe direkt mit eingebaut sodass nichts mehr von außen benötigt wird. Ja gut dann stellt sich mir aber die Frage warum dass nicht immer so gemacht wird? Dann würde jedes Programm ja einfach ohne weiteres laufen und man würde die entsprechende Runtimes ja überhaupt nicht mehr benötigen.



  • @stsmilla

    man würde die entsprechende Runtimes ja überhaupt nicht mehr benötigen.

    Naja, die ist dann halt im Programm. Es verbraucht entsprechend mehr Platz und wenn ein Fehler in der Runtime behoben wird, muss du ein neues Programm ausliefern.



  • @stsmilla : Lade dir mal den Dependency Walker herunter.
    Dann öffne mal damit "notepad.exe" oder "calc.exe" und du wirst sehen, daß diese (neben den ganzen Windows Kernel-DLLs) auch die "MSVCRT.DLL" (also die "Microsoft Visual C++ Runtime"-DLL) benötigen, nur ist diese ältere Version eben schon automatisch bei Windows mitinstalliert (bei mir unter Win10 ist es zurzeit die Version "7.0.18362.1").

    Daher sollte man, wie @manni66 auch schon geschrieben hat, die DLL nicht statisch einbinden, denn so können per Windows-Update neuere Versionen gleich für alle Programme zur Verfügung gestellt werden.

    Und für die neueren "Visual C++ Runtime"-DLLs gibt es (je VS) eine passende Installation: The latest supported Visual C++ downloads

    Und wenn du mehrere benötigst, dann gibt es auch ein Archiv dafür, z.B. Visual C++ Redistributable Runtimes All-in-One (Sep 2019).


Anmelden zum Antworten