Nachdem ich eine CGI-Anwendung in Visual Studio 2008 geschrieben und lokal debigged hatte, habe ich sie auf ein Windows Server 2003-Betriebssystem hochgeladen, wo sie sofort fehlschlug.Ausführen von C++ - Binärdateien ohne die Laufzeit redistributable (Server2k3, XPSP3)
Ich schätze ich die elende Runtime ausschüttbaren installieren müssen, aber nach dem Lesen dieser:
http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/
Ich frage mich, ob es sinnvoller ist, diese Seite an Seite Sachen zu ignorieren und einfach neu zu schreiben die App.
Ich rate, Windows Server 2003 hat keine MSCRVT-Version, die ich brauche? Hat Windows Server 2003 es?
Wenn es sich um die Bereitstellung von Thick Clients handelt, möchte ich die erforderlichen DLLs mit meiner App verteilen. Was gehen sie davon aus, dass ich nur Iostream, Stream, String einschließe?
Ändert sich das erheblich, wenn ich windows.h hinzufüge?
Hinzugefügt:
den/MT-Schalter Mit empfohlen unter
C/C++ -> Code Generation -> Runtime Library -> Multi-Threaded (/ MT)
(Sie werden wahrscheinlich brauchen ein sauberes zu tun:
Körperbau -> sauber
, um die Fehlermeldung
zu vermeiden"Fehler beim Speichern des aktualisierten Manifests in der Datei")
aufgebläht meine App von 38k bis 573k. Das nenne ich Significant (stellen Sie sich vor, wenn das Ihr Gehalt wäre). Da viele Instanzen dieser App ständig geladen und entladen werden (was wertvolle Speicher- und Prozessorressourcen erfordert), würde ich gerne eine bessere (kleinere) Lösung finden.
Ich verstehe, das ist nicht wichtig für viele Situationen heute und nicht der Fokus vieler Entwickler, daher der Trend zu .NOT und 60MB Laufzeiten, aber das ist, was ich tun möchte.
Hinzugefügt:
Nach dem Debuggen Entfernen das Projekt zu kompilieren:
Projekt -> propeties -> C/C++ -> Preprocessor -> Preprocessor Definitionen (entfernen DEBUG;)
Die Größe wurde auf 300k reduziert und es wird laufen.
Hinzugefügt: Wie von Chris Becke unten vorgeschlagen, Kopieren: msvcm90.dll msvcp90.dll msvcr90.dll Microsoft.VC90.CRT.manifest Um das Verzeichnis der Anwendung liefert alle Laufzeit benötigt. Die Verwendung von Visual Studio 6 wurde einige Male vorgeschlagen, unterstützt jedoch nicht Vista (oder Windows 7 nehmen wir an) Andere Lösungen, die keine verteilbare Laufzeit benötigen, wären wahrscheinlich MASM oder sogar eine Variante von Basic.Unglücklicherweise vereitelt dies den Zweck der Verwendung einer höheren OOP-Sprache wie C++.
Solange ich muss C++ Redistributable installiert werden müssen, ist der Kompromiss eine zusätzliche 260k. Das ist akzeptabel
Ändert sich * was * signifikant? So ziemlich alles, was Sie mit VS2008 erstellen, wird auch die Runtime-Installation benötigen. – Joe
Sie werden die Laufzeit fast egal was brauchen. Ihre Wahl ist * wie * Sie es einschließen. Die bequemste Methode ist die Verwendung der statisch verknüpften Version. Dann müssen Sie keine separate DLL verteilen. Andernfalls haben Sie eine halbe Million Möglichkeiten, die DLL zu verteilen. Angefangen von der superkomplizierten Side-by-Side-Sache, die das Lesen von 15 Seiten Dokumentation erfordert, um sie einfach in einen Ordner mit dem richtigen Namen im Stammordner Ihrer App zu stellen, der ziemlich überschaubar ist. – jalf
Ich bin mir nicht sicher, wie effektiv das wäre, aber versuchen Sie, mit den Compiler/Linker-Optionen herumzuhantieren. Es gab einige, die sich auf die Größe der ausführbaren Datei auswirkten (etwas über das Optimieren der Größe und das Entfernen unbenutzter Sachen). –