En cours d'exécution C++ binaires sans le moteur d'exécution redistribuable (Server2k3, XPSP3)
Avoir écrit une application CGI dans Visual Studio 2008 et debigged en local, je l'ai transféré sur un ordinateur Windows Server 2003 du système d'exploitation où il rapidement échoué.
Je suppose que j'ai besoin d'installer le malheureux Runtime distribuables, mais après lecture de ceci:
http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/
Je me demande si il est plus judicieux d'ignorer ce stuff et tout simplement ré-écriture de l'application.
Je devine Windows Server 2003 n'ont pas MSCRVT version dont j'ai besoin?
Windows Server 2003?
Quand il s'agit de déployer des clients lourds, je tiens à distribuer les dll requises avec mon application.
Que sont-ils, en supposant que je viens d'INCLURE iostream, succession, chaîne?
Faut-il changer de manière significative si j'ajoute windows.h?
Ajouté:
L'aide de la /MT commutateur recommandé ci-dessous
C /C++ -> Génération de Code -> Bibliothèque d'Exécution -> multithread(/MT)
(Vous aurez probablement besoin de faire un clean:
Build -> Nettoyer
afin d'éviter le message d'erreur
"Impossible d'enregistrer le manifeste mis à jour dans le fichier")
gonflé mon application de 38k à 573k. C'est ce que j'appelle Significative (imaginez si c'était votre salaire). Depuis de nombreux cas de cette application va être chargés et déchargés en permanence (nécessitant précieux de la mémoire et des ressources du processeur) je voudrais trouver une meilleure (la plus petite) solution.
Je comprends que ce n'est pas important pour de nombreuses situations d'aujourd'hui et pas l'objet de beaucoup de développeurs, d'où la tendance .PAS et 60MO runtimes, mais c'est ce que je veux faire.
Ajouté:
Après le retrait de débogage pour obtenir le projet de compilation:
Projet -> Propriétés -> c/c++ -> Préprocesseur -> Définitions de Préprocesseur (suppression de DÉBOGAGE;)
la taille a été réduite à 300k, et il sera exécuté.
Ajouté:
Comme suggéré par Chris Becke ci-dessous, la copie:
msvcm90.dll
msvcp90.dll
msvcr90.dll
Microsoft.VC90.CRT.manifeste
Le répertoire de l'application fournira tous le moteur d'exécution nécessaires.
À l'aide de Visual Studio 6 a été suggéré à quelques reprises, mais il ne supporte pas Vista (ou Windows 7, nous supposons) d'Autres solutions qui ne nécessitent pas un temps d'exécution distribuable serait probablement me MASM ou même une saveur de Base. Malheureusement, cela va à l'encontre de l'objectif de l'utilisation d'un haut niveau de la programmation orientée objet, les langages comme le C++.
Tellement longtemps que je n'ai besoin d'exiger le C++ redistributable être installé, le compromis est un supplément de 260k. C'est acceptable
Vous allez avoir besoin de le moteur d'exécution presque n'importe quoi. Votre choix est en comment de l'inclure. La méthode la plus pratique est d'utiliser le statiquement version. Ensuite, vous n'avez pas à distribuer une dll. À défaut, vous disposez d'un demi-million de façons de distribuer le fichier dll. Allant de la super-compliqué side-by-side chose qui nécessite la lecture des 15 pages de documentation, il suffit de le mettre dans un dossier avec le nom correct dans votre dossier racine de l'application, ce qui est assez gérable.
Je ne suis pas sûr de l'efficacité de ce serait, mais essayer de bidouiller avec le compilateur/linker options. Il y avait quelques-uns qui ont affecté la taille de l'exécutable (quelque chose au sujet de l'optimisation de la taille et de la suppression inutilisés des trucs).
Ajout /MT provoque le C et le C++ runtime être lié statiquement, au lieu de lié de façon dynamique, d'où l'augmentation de la taille. Vous ne savez pas si cela fait une différence, car dans les deux cas, le moteur d'exécution doit encore être chargé dans votre processus de l'espace d'adresse. Pourquoi ne pas lancer maintenant? Quel message d'erreur avez-vous l'obtenir? Essayez de le charger avec depends.exe et voir ce que les Dll qu'il recherche.
Voir ci-dessus. Sa recherche d'une certaine version de MSVCRT qui doit être installées côte à côte (c'est ce que le C++ runtime). Je NE peux pas le faire dans ce cas.
OriginalL'auteur Mike Trader | 2009-10-17
Vous devez vous connecter pour publier un commentaire.
Une liste plus complète d'options:
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT
dans le même dossier que votre application exe. Si vous avez installé le SP1, ce dossier contiendra le SP1 runtime, mais votre demande sera demander pour la RTM runtime (allez comprendre). Ajouter_BIND_TO_CURRENT_CRT_VERSION
à vos projets définit, de reconstruire et qui doit s'occuper lui-même.OriginalL'auteur Chris Becke
Permettez-moi de revoir ma réponse:
Vous avez un peu d'options:
1) Installer le VC++2008 runtime. Vous pouvez télécharger et de l'installateur. Les modules de fusion sont également disponibles.
2) Lier contre le moteur d'exécution de manière statique (/MT ou C/C++ -> Génération de Code -> Bibliothèque d'Exécution: Multi-thread). Cela permettra d'augmenter la taille de votre exécutable, mais il ne dépendra pas de toutes les Dll. Si vous êtes inquiet au sujet de la taille, seule l'utilisation de la bibliothèque C standard ou seulement utiliser l'API Windows directement.
3) Utilisez une ancienne version de VC++. 2005 et antérieures n'a pas besoin du runtime installé. La Dll peut être placé dans le même répertoire que l'exécutable. Si vous utilisez VC++6.0 le temps de fonctionnement sera installé sur toutes les versions de windows, sinon vous devez installer vous-même.
Codeur ou de la Morue? Haha.. vous avez probablement raison, j'ai essayé de le faire de mémoire.
OriginalL'auteur Roland Rabien