10
votes

Pourquoi le forfait Visual C ++ redistribuable est-il requis?

Si le code compilé par un compilateur Visual C ++ est droit C ++, pourquoi avez-vous besoin d'un package redistribuable? Est-ce que cela rend votre plate-forme de code dépendante? Utilise le compilateur Visual C ++ avec le paquet redistribuable fournit un avantage sur l'utilisation d'un autre IDE avec g ++?


2 commentaires

Le code compilé est TOUJOURS la plate-forme dépendante. Cela fonctionne, et seulement sur, la plate-forme qu'il a été compilée.


Ce n'est pas nécessaire. Vous devriez plutôt créer un projet de configuration. Ou compiler avec / mt au lieu de / md de sorte que vous n'en avez pas besoin du tout. Risqué cependant lorsque vous utilisez des dlls.


5 Réponses :


9
votes

Le code n'est pas dépendant de la plate-forme, l'exécutable résultant est. Il est lié à l'encontre des bibliothèques MS avec l'implémentation de la bibliothèque standard, qui sont incluses dans la redistribuabilité en tant que DLL.

IIRC Il devrait y avoir une option pour une liaison statique de tout, de sorte que vous n'auriez pas besoin de la redistribuabilité supplémentaire, mais le binaire résultant serait toujours dépendant de la plate-forme - par exemple, vous ne pouvez pas exécuter de binaire Windows sur un système UNIX (sans vin au moins).


7 commentaires

Vous avez le choix d'inclure le gestionnaire de mémoire, la bibliothèque d'E / S standard, ainsi qu'une copie séparée dans chaque application, sans bon gérer et de la mettre à niveau et de les tonnes de BLOAT, ou d'installer une seule heure d'exécution. 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 Windows quand même, est-ce juste?


Cela dépend de l'installation de Windows et du temps d'exécution. Une nouvelle installation de Windows Vista SP1, par exemple (si quelqu'un l'installe toujours) n'aura pas le temps d'exécution VS2010.


Même une nouvelle installation de Windows Server 2008 R2 ne dispose pas de l'exécution de VS 2010 installée, ou du moins, je ne me souviens pas que cela fait ... Celles-ci sont destinées à être redistribuées. Mais notez qu'il est toujours possible de créer un exécutable avec le compilateur C / C ++ de Microsoft, pas lié ​​sur les bibliothèques d'exécution C et ne dépend donc pas de leur être installé.


@littleadv Je ne pense pas que ce soit. Bien sûr, je ne peux pas confirmer cela parce que je ne possède pas une machine qui ne l'a pas déjà vs. Je sais que dans la plupart des distros de Linux, cependant, les fichiers d'en-tête de C ne sont pas inclus avant d'installer GCC et que les fichiers d'en-tête et la plupart des libs (selon la distribution) ne sont pas installés pour C ++ avant d'installer g ++. À moins que les fichiers d'en-tête des stdlibs C et C ++ sont précompilisés, je ne peux pas imaginer qu'ils viennent avec le système d'exploitation Windows. Cependant, je ne sais pas comment le système d'exploitation Windows fonctionne sans que les Libs sont en grande partie écrites en C ++.


Donc, dans votre opinion, VC ++ fournit-il un avantage sur la compilation avec un autre IDE avec g ++?


Non, il n'y a pas d'avantage. Tout compilateur décent C ++ est tout à fait bien et Microsoft's et G ++ qualifie une "décente". Il y a des discussions parmi ceux qui parlent de telles choses que le compilateur de Microsoft produit de meilleurs code Windows que g ++ (c'est-à-dire qu'il est préférable d'optimiser / modifier le code des applications Windows), mais je ne suis pas sûr qu'il y ait une vérité à une telle réclamations. Vous devriez le profiler et voir par vous-même. Toutefois toute différence est susceptible d'être extrêmement mineure et presque insignifiante. Si vous êtes déjà content de G ++, tenez-vous simplement avec elle. Et si vous aimez VC ++, de même.



5
votes

Il n'y a pas de "droite C ++". Il y aura toujours des fonctions de bibliothèque que vous appelez ici et là-bas dans votre code, et même si vous faites très attention à ne pas, il y aura des fonctions qui devront être appelées simplement par code émis par le compilateur. Par exemple, si vous avez la boucle suivante:

for( int i = 0;  i < count;  i++ )
    array1[i] = array2[i];


0 commentaires

1
votes

La redistribuabilité C ++ est spécifique à l'IDE que vous utilisez ("IDE" que je dis, mais c'est vraiment spécifique au compilateur, mais que l'IDE & Compiler sont tous deux attribués à la fois de nouvelles versions lorsque les choses se déplacent.)

Il est spécifique à cet IDE, mais pas au système d'exploitation Win. Il devrait donc être compatible en arrière (en supposant que vous n'utilisez pas de nouvelles API, évidemment.) En fait, cela est fait, il est donc compatible en arrière (et pas l'inverse que vous pensez.) Cela vous permet d'utiliser le dernier La plus grande version IDE (10, 11, 12 ...) et exécutez toujours votre code sur Win2k!

Maintenant, bien sûr, il 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 façon.

Je ne connais pas un moyen de compiler C ++ statiquement de manière à pouvoir éviter ces redistributables. Il peut être possible, bien que cela rendrait certainement votre .exe très gros.


0 commentaires

0
votes

Je garde toujours une copie de Visual C ++ 6 installé sur une machine virtuelle XP (ne fonctionne pas correctement dans Win 6/7/8). Parfois, j'écris ou je suis invité à écrire une application utilitaire pour faire quelque chose de rapide et / ou une fois de plus que je compile comme un seul exe. J'en ai marre d'envoyer un programme simple écrit en utilisant uniquement le STD Lib à quelqu'un d'autre que pour qu'ils ne me disent que cela ne fonctionne pas à cause d'une DLL manquante ou d'un pack ré-distributable.


0 commentaires

0
votes

Dans vos propriétés de votre projet, C / C ++, ensemble de génération de code Régler la bibliothèque d'exécution vers / MT pour votre version de version.

(crédits à Mike Danes qui a répondu à cette question sur social.MSDN: https://social.msdn.microsoft.com/forums/vstudio/forums/vstudio/forums EN-US / 09FD4BE-7A15-4772-98C1-A0464A96CD7F / HOW-TOT-STATIC-LINDAGE-IN-VISUAL-C-Express-Edition-2010? Forum = VCGeneral & Prof = Obligatoire )


0 commentaires