Ausführen von C++ - binaries ohne die runtime redistributable (Server2k3, XPSP3)

Geschrieben haben eine CGI-Anwendung in Visual Studio 2008 und debigged lokal, ich habe Sie auf einem Windows Server 2003 OS, wo es prompt ausführen konnte.

Ich vermute, ich brauche zu installieren, um den Elenden Runtime verteilbare, aber nach der Lektüre dieses:

http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/

Frage ich mich, ob es mehr Sinn macht, dies zu ignorieren nebeneinander Zeug und nur re-schreiben die app.

Ich vermute, Windows Server 2003 nicht MSCRVT version ich brauche?
Funktioniert die Windows Server 2003-es haben?

Wenn es um die Bereitstellung von thick clients, die ich verteilen möchte die benötigten dlls mit meiner app.
Was werden Sie davon ich nur iostream, sstream, string?

Ändert sich deutlich wenn ich von windows.h?

Hinzugefügt:

Mit /MT /MT-Schalter unten empfohlen

C /C++ -> Code-Generation -> Runtime-Bibliothek -> Multi-threaded(/MT)

(Werden Sie wahrscheinlich benötigen, um ein sauberes:

Bauen -> Reinigen Sie

um die Fehlermeldung zu vermeiden

"Fehler beim speichern der aktualisierten manifest zu der Datei")

aufgeblähten meine app von 38k auf 573k. Das ist, was ich nennen Signifikant (Stell dir vor, dass Ihr Gehalt). Da viele Instanzen dieser app wird geladen und entladen werden ständig (die wertvollen Arbeitsspeicher und Prozessor-Ressourcen) ich würde gerne eine bessere (kleinere) Lösung.

Ich verstehe, das ist nicht wichtig für viele Situationen im heute und nicht im Fokus vieler Entwickler, daher der trend zu .NICHT und 60MB Laufzeiten, aber das ist, was ich tun will.

Hinzugefügt:

Nach dem entfernen der debugging, um das Projekt zu kompilieren:

Projekt -> Propeties -> c/c++ -> Präprozessor -> Präprozessor-Definitionen löschen ("DEBUG";)

die Größe wurde reduziert auf 300k, und es wird laufen.

Hinzugefügt:
Vorgeschlagen von Chris Becke unten kopieren:
msvcm90.dll
msvcp90.dll
msvcr90.dll
Microsoft.VC90.CRT.manifest
In das Verzeichnis der Anwendung, werden alle der Laufzeit benötigt.

Mithilfe von Visual Studio 6 wurde vorgeschlagen, ein paar mal, aber es keine Unterstützung für Vista (oder Windows 7 übernehmen wir) Andere Lösungen, die nicht erfordern eine runtime verteilbare würde wahrscheinlich mich MASM oder sogar einen Geschmack von Basic. Leider, dass Niederlagen der Zweck der Verwendung ein hohes Maß OOP-Sprache wie C++.

So lange, wie ich tun müssen, zu verlangen, dass der C++ redistributable installiert werden, der trade-off ist eine zusätzliche 260k. Das ist akzeptabel

  • Tut, was erheblich ändern? Ziemlich viel, fast alles, was Sie bauen mit VS2008 ist zu verlangen, dass die runtime-Installation als auch.
  • Sie gehen zu müssen, um die Laufzeit fast egal, was. Ihre Wahl wird, wie Sie es. Die komfortabelste Methode ist die Verwendung der statisch gelinkten version. Dann müssen Sie nicht haben, zu verteilen eine separate dll überhaupt. Gelingt das nicht, haben Sie eine halbe million Wege zu verteilen die dll. Angefangen von der super-kompliziert side-by-side Sache, dass erfordert Lesen der 15 Seiten Dokumentation, um nur indem Sie in einem Ordner mit dem richtigen Namen im app-root-Ordner, der ist ziemlich überschaubar.
  • Ich bin mir nicht sicher wie effektiv dies sein würde, aber versuchen, das hantieren mit den compiler - /linker-Optionen. Es gab ein paar, die Auswirkungen auf die ausführbare Datei Größe (etwas über die Optimierung für die Größe und entfernen von unbenutzten Kram).
  • Hinzufügen /MT bewirkt, dass die C-und C++ - runtimes werden statisch statt dynamisch verknüpft, damit die Erhöhung in der Größe. Nicht sicher, ob dies tatsächlich einen Unterschied macht, da in beiden Fällen die Laufzeit noch geladen werden muss, in Ihre Prozesse Adressraum. Warum nicht jetzt starten? Welche Fehlermeldung erhalten Sie? Versuchen Sie es mit depends.exe und sehen, welche Dlls gesucht wird.
  • Siehe oben. Seine Suche nach einer version von MSVCRT, die installiert werden muss Seite an Seite (das ist, was der C++ runtime nicht). Ich kann das NICHT in diesem Fall.
  • Ich bin verwirrt, mit /MT, es ist immer noch zu Fragen, für MSVCRT? Oder Sie einfach nicht verwenden möchten /MT? Wenn Sie nicht installieren können MSVCRT, müssen Sie verwenden eine ältere version von VS, wie 2005. Dann können Sie nur die runtime-Dlls im aktuellen Ordner. Oder Sie können installieren Sie die Dlls, Microsoft bietet eine weitervertreibbare Installationsprogramm. microsoft.com/downloads/...
  • Ernsthaft? Sie denken, 500kb Speicher-Auslastung "ein erhebliches problem"? Wirklich? Was für einen computer verwendest du diese auf, ein Taschenrechner?

InformationsquelleAutor Mike Trader | 2009-10-17
Schreibe einen Kommentar