Après avoir écrit une application CGI dans Visual Studio 2008 et l'avoir déboguée localement, je l'ai téléchargée sur un système d'exploitation Windows Server 2003 où elle a échoué rapidement.Exécution de fichiers binaires C++ sans l'exécutable redistribuable (Server2k3, XPSP3)
Je suppose que je dois installer le distribuables misérable d'exécution, mais après avoir lu ceci:
http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/
Je me demande s'il est plus logique d'ignorer ce côté par des trucs de côté et tout simplement ré-écriture l'application.
Je suppose que Windows Server 2003 n'a pas la version de MSCRVT dont j'ai besoin? Est-ce que Windows Server 2003 l'a?
En ce qui concerne le déploiement de clients lourds, je souhaite distribuer les DLL requises avec mon application. Que supposent-ils que je viens d'inclure iostream, sstream, string?
Est-ce que ça change de façon significative si j'ajoute windows.h?
Ajouté:
Utilisation du commutateur/MT recommandé ci-dessous
C/C++ -> Génération de code -> Runtime Library -> Multi-thread (/ MT)
(Vous aurez probablement besoin faire un nettoyage:
Construire -> nettoyer
afin d'éviter le message d'erreur
"Impossible d'enregistrer le manifeste mis à jour dans le fichier")
a gonflé mon application de 38k à 573k. C'est ce que j'appelle Significant (imaginez si c'était votre salaire). Comme de nombreuses instances de cette application seront chargées et déchargées en permanence (nécessitant de précieuses ressources de mémoire et de processeur), je voudrais trouver une meilleure solution (plus petite). Je comprends que ce n'est pas important pour de nombreuses situations aujourd'hui et pas l'objectif de nombreux développeurs, d'où la tendance à .NOT et 60MB runtimes, mais c'est ce que je veux faire.
Ajouté:
Après avoir enlevé le débogage pour obtenir le projet de compilation:
Projet -> Propeties -> c/C++ -> préprocesseur -> préprocesseur Définitions (supprimer DEBUG;)
la taille a été réduite à 300k, et elle fonctionnera.
Ajouté: Comme suggéré par Chris Becke ci-dessous, la copie: msvcm90.dll msvcp90.dll msvcr90.dll Microsoft.VC90.CRT.manifest le répertoire de l'application fournira toute la durée nécessaire. L'utilisation de Visual Studio 6 a été suggérée à quelques reprises, mais elle ne supporte pas Vista (ou Windows 7, nous supposons). D'autres solutions qui ne nécessitent pas une distribution distribuable me serviront probablement de MASM ou même un aperçu de Basic.Malheureusement, cela va à l'encontre de l'objectif d'utiliser un langage OOP de haut niveau tel que C++.
Tant que j'ai besoin d'exiger que le redistribuable C++ soit installé, le compromis est de 260k supplémentaires. Cest
Est-ce que * quoi * change de manière significative? À peu près tout, presque tout ce que vous construisez avec VS2008 va nécessiter l'installation à l'exécution. – Joe
Vous aurez besoin de l'exécution presque n'importe quoi. Votre choix est dans * comment * vous l'incluez. La méthode la plus pratique consiste à utiliser la version liée statiquement. Ensuite, vous n'avez pas à distribuer une DLL séparée du tout. A défaut, vous avez un demi-million de façons de distribuer la DLL. Allant de la chose côte à côte super-compliquée qui nécessite de lire 15 pages de documentation, de simplement le mettre dans un dossier avec le nom correct dans le dossier racine de votre application, ce qui est assez gérable. – jalf
Je ne suis pas sûr de son efficacité, mais essayez de bidouiller avec les options du compilateur/éditeur de liens. Il y en avait quelques-uns qui affectaient la taille de l'exécutable (quelque chose à propos de l'optimisation de la taille et de la suppression des éléments inutilisés). –