Qu'est-ce qui se trouve dans la bibliothèque d'exécution de Mme Visual C ++? Je veux dire, je le googla, et j'ai toujours trouvé des choses comme aide, app xxxx me donne une erreur de bibliothèque d'exécution MS Visual C ++, sans explication. P>
Je pensais que les bibliothèques d'exécution de Windows C sont livrées avec Windows? Pas avec VC ++? Merci. P>
EDIT: Tout d'abord, merci pour des réponses. Je pense maintenant que j'ai une mauvaise idée des bibliothèques d'exécution dans Windows. Je veux dire, la première partie, que Windows a une API Win32 et donc, ça va, je le savais. En outre, que Win32API viennent de noyau et de pièces utilisateur. P>
Mais j'ai toujours pensé que des fonctions telles que GDI sont accessibles en tant que DLL (que je crois toujours qu'ils sont). Mais je pensais même des fonctions telles que Alors, suis-je raison, quand je sais que vous savez que les fonctions "simples" telles que Je veux dire, disons GDI, je le dis de dessiner une image, il rend tout le travail acharné en mode utilisateur et que l'appeler fonction du noyau qui met tout dans la tramebuffer? P>
Et la dernière pensée, pourquoi cela est-il même résolu de cette façon? Je veux dire, si VC ++ Runtime est juste une couche entre C et Winapi, pourquoi Cant VC ++ appelle directement Winapi? P> printf code> et sont donc dans certains fichiers Windows. P>
printf code> doivent être liées directement et qu'on utilise uniquement une partie du noyau directement, et des fonctions de l'API Windows plus sophistiquées sont Lié en tant que DLL, ne sont donc pas distribués avec le compilateur mais avec OS? Et ils accèdent ensuite le noyau? P>
4 Réponses :
Une réponse brève serait que les MSVS C / C ++ Runtime met en œuvre des fonctions telles que MALLOC / GRATUITEMENT, STDIO, IOSTREAM et certains C ++ - Stuffts tels que dynamic_cast et manipulation des exceptions. Celles-ci diffèrent entre les versions de Visual Studio, il existe donc différents accidents de différentes versions. P>
Windows Ship surtout avec une API C (l'API Win32) qui est plutôt différente de la bibliothèque standard C / C ++. L'exécution de MSVS C / C ++ appelle à cette API pour allouer la mémoire, etc., etc. P>
(Je suppose que certaines des applications incluses avec Windows sont écrites avec des MSV et en C ++, elles incluent donc l'exécution des MSVS pour cette version.) P>
En outre, l'exécution change alors que de nouvelles versions Visual Studio sont publiées. Une version de Windows dure beaucoup plus longtemps que cela. P>
Ainsi, j'ai ce droit que le temps d'exécution Visual C ++ inclut une implémentation de la bibliothèque standard C ++ liée à l'exécution (au cas où vous ne souhaitez pas créer de lien vers une bibliothèque standard C ++ à la compilation)? Et de ce que je rassemble, cela inclut probablement des ajouts Microsoft non standard? Modifier?
@JOHNB: Vous pouvez le lier de manière statique dans des cas simples (EXE unique, etc.). Il peut inclure des éléments spécifiques au MSFT, mais avant tout, il contient les pièces pré-compilées de Microsoft C ++ STDLIB et d'autres éléments d'exécution C / C ++ (MALLOC / GRATUIT, GLOBAL / DELETE, MEMCY, RTTI, etc.). Si vous regardez d'autres compilateurs, ils ont également leur propre runtime, avec certaines bibliothèques qui doivent être liées, d'une manière ou d'une autre.
Programmes compilés avec Visual C ++ nécessitent un "exécution" - il s'agit d'un peu de code qui gère l'application de démarrage / arrêt de l'application, d'allocation de mémoire / de distribution de la mémoire, de prise en charge des fichiers de lecture et d'écriture, etc. P>
Cela ne fait pas partie du système d'exploitation et ne fait pas partie de l'application finale - car toutes les applications C ++ peuvent le partager, par défaut, l'exécution est une installation distincte. P>
En outre, chaque version de Visual C ++ possède son propre programme d'installation d'exécution, car avec chaque version, il existe de légères différences et améliorations de la manière dont tout cela fonctionne. Il existe également différents verisons du temps d'exécution pour différentes plateformes (par exemple X86 et X64) P>
Par conséquent, il existe un certain nombre de téléchargements "Visual Studio XXXXX XXXX XXXX XXXX XXXX (YYY)" disponibles à partir de Microsoft, où le XXXX est la version Visual Studio (2005, 2008, 2010, etc.), etc. est généralement "x86". ou "x64". p>
La plupart des applications qui ont besoin de l'exécution l'installeront automatiquement si nécessaire, de manière générale, les utilisateurs finaux ne sont pas très conscients de ces redistributables. P>
Il peut faire partie de l'application finale si vous sélectionnez les bonnes options dans Visual Studio - mais en général, ce n'est pas et vous avez raison.
Ce sont les bibliothèques qui implémentent les fonctions de bibliothèque standard C et C ++. Les fonctions standard telles que Les bibliothèques principales Windows fournissent uniquement des interfaces aux appels système, c'est-à-dire le Win32 API , depuis que cela Il est tout ce dont vous avez besoin pour créer une application Windows complète. Les bibliothèques VC ++ sont principalement des emballages autour de cette API et sont analogues au Par exemple, printf code> sont implémentées dans ces bibliothèques. P>
glibc code> une bibliothèque sur Linux. P>
MALLOC code> de la bibliothèque C peut à son tour utiliser le
virtualalloc code>
API pour allouer la mémoire. P>
Il s'agit d'une simplification excessive, mais cela vous donnera le gist. Le MSVCRT est un ensemble de DLL qui implémente des parties de la langue C ++. Fonctions telles que Chaque programme compilé avec un compilateur particulier et lié dynamiquement aux roulements C ++ doit en quelque sorte avoir la version correcte em> des fichiers binaires CRT sur la machine cible. En conséquence, les applications qui expédient les utilisateurs finaux sont souvent (généralement?) Également expédiées avec un paquet de ces DLL. Ce paquet s'appelle une "redistribuabilité" (ou "redistribuable") et il existe une autre pour chaque combinaison de la version exacte du compilateur et de la plate-forme cible. Par exemple, il existe des redistres séparés et distincts pour chacun des éléments suivants: p>
et cetera. p>
Oui, Windows habituellement "est livré avec" une version de la CRT. Cependant, il est livré avec la ou les versions qu'il a besoin pour exécuter les applications fournies avec Windows. Si Windows et toutes les applications sont compilées dans MSVC8 SP2 et que votre application est compilée dans MSVC10, le CRT vous em> nécessite ne sera pas présent sur la case simplement parce qu'il exécute des fenêtres. P>
C'est pourquoi sa pratique courante pour expédier des applications avec des réducteurs. P>
En passant de Houdini comme Magic, je prédis que votre prochaine question sera "Où puis-je obtenir les Redistes?" P>
La réponse est, de Microsoft. Essayez une recherche Google pour "MSVC 9 x64 Redist" et vous trouverez: P>
printf code>,
memcpy code> et similaire sont implémentés dans ces DLL. P>
EDIT: H2>