Si le code compilé par un compilateur C++ visuel est en C++, pourquoi avez-vous besoin d'un paquet redistribuable? Est-ce que cela rend votre plateforme de code dépendante? Est-ce que l'utilisation du compilateur visuel C++ avec le paquet redistribuable offre un avantage par rapport à l'utilisation d'un autre IDE avec g ++?Pourquoi le package redistribuable Visual C++ est-il requis?
Répondre
Le code ne dépend pas de la plate-forme, le exécutable qui en résulte est. Il est lié aux bibliothèques MS avec l'implémentation de la bibliothèque standard, qui sont inclus dans le redistribuable en tant que DLL. IIRC il devrait y avoir une option pour la liaison statique de tout, de sorte que vous n'ayez pas besoin du redistribuable supplémentaire, mais le binaire résultant serait toujours dépendant de la plate-forme - par exemple vous ne pouvez pas exécuter un binaire Windows sur UNIX système (sans WINE au moins).
Vous avez le choix d'inclure le gestionnaire de mémoire, la bibliothèque d'E/S standard, et une copie distincte dans chaque application, sans aucun moyen de la gérer et de la mettre à niveau et de surcharger, ou d'installer un seul temps qui contient tout ce code une fois pour chaque application qui pourrait en avoir besoin. –
@DavidSchwartz ouais ... Et je pense que c'est inclus par défaut avec toutes les installations de Windows, n'est-ce pas? – littleadv
Cela dépend de l'installation de Windows et de l'heure d'exécution. Une nouvelle installation de Windows Vista SP1, par exemple (si quelqu'un l'installe encore) n'aura pas l'exécution VS2010. –
Il n'existe pas de "Straight C++". Il y aura toujours des fonctions de bibliothèque que vous appelez ici et là dans votre code, et même si vous êtes très prudent, il y aura certaines fonctions qui devront être appelées simplement par le code émis par le compilateur. Par exemple, si vous avez la boucle suivante:
for(int i = 0; i < count; i++)
array1[i] = array2[i];
Le compilateur remplacer par un code qui copie simplement la mémoire sur. Et si vous compilez pour une taille plus petite au lieu de la vitesse, ce sera un appel à une fonction très semblable à memmove(). De plus, vous pouvez avoir des opérations en virgule flottante pour lesquelles il n'existe pas d'instructions x86 équivalentes directes; ceux-ci seront également mis en œuvre avec des appels de fonction. Et la liste continue. Cela ne rend pas votre plate-forme de code dépendante, car sur une plate-forme différente, le compilateur de ce plafrom compilera le même code que le vôtre pour s'adapter à l'environnement d'exécution C++ de cette plate-forme. Heureusement, il n'est pas nécessaire que l'environnement d'exécution C++ soit une entité distincte de votre application. Vérifiez les options du compilateur et de l'éditeur de liens. vous devriez être capable de produire un seul exécutable qui contient les deux. Si vous avez trouvé que g ++ ne nécessite pas de runtime séparé, c'est parce qu'il le fait par défaut.
Le C++ redistribuable sont spécifiques à l'IDE que vous utilisez (« IDE » Je dis, mais c'est vraiment spécifique au compilateur, mais le compilateur IDE & sont tous deux nouvelles versions affecté que les choses se déplacent le long.)
Il est rendu spécifique à cet IDE, mais pas au système d'exploitation Win. Donc, il devrait être rétrocompatible (en supposant que vous n'utilisez pas de nouvelles API, évidemment.) En fait, cela est fait pour qu'il soit rétrocompatible (et non l'inverse comme vous le pensez.) Cela vous permet d'utiliser les dernières meilleure version de l'IDE (10, 11, 12 ...) et toujours exécuter votre code sur Win2k! Maintenant, bien sûr, c'est très différent de Linux où vous êtes censé recompiler sur chaque version principale de toute façon. La plupart des systèmes Unix fonctionneront de cette manière.
Je ne connais pas un moyen de compiler C++ statiquement afin de pouvoir éviter ces redistribuables. C'est peut-être possible, même si cela rendrait certainement votre fichier .exe très gros.
Je garde toujours une copie de Visual C++ 6 installé sur une machine virtuelle xp (Ne fonctionnera pas correctement dans Win 6/7/8). Parfois, j'écris ou je suis invité à écrire une application utilitaire pour faire quelque chose rapidement et/ou une fois que je compile comme un seul exe.J'en ai eu marre d'envoyer un simple programme écrit en utilisant seulement la lib de std à quelqu'un d'autre seulement pour qu'ils me disent que ça ne marche pas à cause d'une DLL manquante ou d'un paquet redistribuable.
Dans vos propriétés de projet, C/C++, Génération de code, définissez la bibliothèque Runtime sur/MT pour votre version finale.
(Crédits à Mike Danois qui ont répondu à cette question sur social.msdn: https://social.msdn.microsoft.com/Forums/vstudio/en-US/09afd4be-7a15-4772-98c1-a0464a96cd7f/how-to-static-linkage-in-visual-c-express-edition-2010?forum=vcgeneral&prof=required)
- 1. Package redistribuable Microsoft Visual C++ 2008 - quels fichiers contient-il?
- 2. visual C++ 2010 redistribuable
- 3. Pourquoi installer le package redistribuable Microsoft Visual C++ 2010 x86 pour utiliser SQLite?
- 4. Quelles bibliothèques Windows sont manquantes dans le package redistribuable Visual C++?
- 5. Quelle est la différence entre un package redistribuable de Microsoft Visual C et un package d'exécution?
- 6. Pourquoi certains Winapp sans paquet redistribuable C++?
- 7. Vérifiez si le package redistribuable Visual C++ 2008 SP1 est installé?
- 8. Le package redistribuable Microsoft Visual C++ 2008 peut-il être librement redistribué?
- 9. À quoi sert le package redistribuable Visual C++ 2005 Service Pack 1?
- 10. Ajout de prérequis Visual C++ runtime redistribuable
- 11. Comment puis-je tester le redistribuable Visual C++?
- 12. Comment installer le package redistribuable de .NET Framework avec Wix?
- 13. Delphi: Package requis non trouvé
- 14. Package redistribuable Microsoft VC++ 2005 SP1 et 2008 SP1
- 15. Le package redistribuable Visual Studio 2008 SP1 est-il disponible dans n'importe quel service/mise à jour Windows?
- 16. Conditionnement de Visual Studio 2012 redistribuable dans une configuration InstalLShield
- 17. Visual Studio redistribuable & side-by-side/dependentAssembly erreur
- 18. Générer le package de projet C++ Builder
- 19. Générer un projet Visual Studio redistribuable avec cmake
- 20. Exécution de fichiers binaires C++ sans l'exécutable redistribuable (Server2k3, XPSP3)
- 21. Visual C++ Runtime Package au style de métro
- 22. Existe-t-il une version du package redistribuable VC++ 2008 avec les DLL DEBUG?
- 23. Pourquoi le codage XML est-il requis?
- 24. .NET 3.5 Client Framework redistribuable?
- 25. Package RHEL pour le package libmono-winforms
- 26. Version Windows Python et version redistribuable VC++
- 27. VC2005 SP1 Support x64 redistribuable sous Windows 7
- 28. C# - Xamarin: l'installation android.support.design package
- 29. Navigateur Web redistribuable
- 30. Visual C# - Le programme ne fonctionne pas
code compilé est * toujours * dépendant de la plateforme. Il fonctionne sur, et seulement sur, la plate-forme pour laquelle il a été compilé. –
Ce n'est pas obligatoire. Vous devriez créer un projet d'installation à la place. Ou compilez avec/MT au lieu de/MD donc vous n'en avez pas du tout besoin. Risques cependant quand vous utilisez des DLL. –