7
votes

Mme Visual C ++ Runtime Library - Quoi pour?

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.

Je pensais que les bibliothèques d'exécution de Windows C sont livrées avec Windows? Pas avec VC ++? Merci.

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.

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 printf et sont donc dans certains fichiers Windows.

Alors, suis-je raison, quand je sais que vous savez que les fonctions "simples" telles que printf 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?

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?

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?


0 commentaires

4 Réponses :


2
votes

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.

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.

(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.)

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.


2 commentaires

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.



2
votes

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.

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.

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)

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".

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.


1 commentaires

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.



2
votes

Ce sont les bibliothèques qui implémentent les fonctions de bibliothèque standard C et C ++. Les fonctions standard telles que printf sont implémentées dans ces bibliothèques.

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 glibc

Par exemple, MALLOC de la bibliothèque C peut à son tour utiliser le virtualalloc API pour allouer la mémoire.


0 commentaires

6
votes

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 printf , memcpy et similaire sont implémentés dans ces DLL.

Chaque programme compilé avec un compilateur particulier et lié dynamiquement aux roulements C ++ doit en quelque sorte avoir la version correcte 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:

  • Windows MSVC 10, 64 bits
  • Windows MSVC 10, 32 bits
  • Windows MSVC9, 64 bits
  • MSVC9 SP1, Windows 64 bits

    et cetera.

    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 nécessite ne sera pas présent sur la case simplement parce qu'il exécute des fenêtres.

    C'est pourquoi sa pratique courante pour expédier des applications avec des réducteurs.

    EDIT:

    En passant de Houdini comme Magic, je prédis que votre prochaine question sera "Où puis-je obtenir les Redistes?"

    La réponse est, de Microsoft. Essayez une recherche Google pour "MSVC 9 x64 Redist" et vous trouverez:

    http: // www.microsoft.com/downloads/fr/details.aspx?familyID=BD2A6171-E2D6-4230-B809-9A8D7548C1B6&DISPLAYLANG=EN


0 commentaires