132 votes

Ce qui est de la bibliothèque runtime C ?

OK, je sais que c'est peut-être le plus stupide question jamais posée ici, mais qu'est-ce que la bibliothèque d'exécution C et ce qui est utilisé pour? J'étais à la recherche, Googler comme un diable, mais je ne pouvais pas trouver quelque chose de mieux que de Microsoft: "La bibliothèque d'exécution Microsoft fournit des routines de programmation pour le système d'exploitation Microsoft Windows. Ces routines d'automatiser de nombreuses tâches de programmation qui ne sont pas fournis par les langages C et C++."

OK, je le conçois, mais par exemple, quelle est en libcmt.lib? Que faut-il faire? Je pensais que la bibliothèque standard C était une partie de C compilateur. Donc, est - libcmt.lib Windows de mise en œuvre de la bibliothèque C standard des fonctions de travail sous win32?

61voto

Jerry Coffin Points 237758

Oui, libcmt est (un à plusieurs) implémentations de la bibliothèque C standard fourni avec le compilateur de Microsoft. Ils fournissent à la fois "debug" et "release" versions de trois types de bibliothèques: single-threaded (toujours lié statiquement), multi-thread lié statiquement, et multi-thread liée de façon dynamique (bien que, selon le compilateur de la version que vous utilisez, certaines peuvent ne pas être présent).

Ainsi, dans le nom de "libcmt", "libc" est la (plus ou moins) le nom traditionnel de la bibliothèque C de. Le "mt" signifie "multi-thread". Un "debug" version aurait un "d" ajouté à la fin, donnant "libcmtd".

Aussi loin que ce que les fonctions qu'il comprend, le C standard (partie 7, s'il vous arrive de soins) définit un ensemble de fonctions conforme (hébergé) la mise en œuvre doit fournir. La plupart des fournisseurs (y compris Microsoft) ajouter diverses autres fonctions elles-mêmes (pour la compatibilité, de fournir des capacités de la norme, les fonctions ne font pas l'adresse, etc.) Dans la plupart des cas, il contient également tout à fait un peu "interne" des fonctions qui sont utilisées par le compilateur, mais pas normalement par l'utilisateur final.

Si vous souhaitez obtenir une liste complète des fonctions de "libcmt" (pour reprendre votre exemple), vous pouvez l'ouvrir Visual Studio invite de commande (sous Visual Studio "Outils", normalement), basculez vers le répertoire où vos bibliothèques ont été installés, et tapez quelque chose comme: lib -list libcmt.lib , et il va générer une (longue) liste des noms de tous les fichiers de l'objet dans la bibliothèque. Ceux-ci ne correspondant pas toujours directement aux noms des fonctions, mais seront généralement vous donner une idée. Si vous voulez regarder un objet particulier de fichier, vous pouvez utiliser lib -extract pour l'extrait de l'un de ces fichiers objet, puis utilisez `dumpbin symboles " pour trouver quelle fonction(s) est/sont dans ce fichier de l'objet.

43voto

fantagons Points 111

Au premier abord, nous devons comprendre ce qu'est une Bibliothèque d'Exécution; et de penser ce qu'il pourrait dire par "Microsoft C Runtime Library".

voir: http://en.wikipedia.org/wiki/Runtime_library

J'ai posté plus de l'article ici, car il peut être mis à jour.

Lorsque le code source d'un programme d'ordinateur est traduit dans la langue cible par un compilateur, il serait la cause d'un extrême à l'élargissement de code de programme si chaque commande dans le programme et de chaque appel d'une fonction intégrée serait la cause de la génération de l'intégrale de code de programme correspondant dans la langue cible à chaque fois. Au lieu de cela, le compilateur utilise souvent compilateur spécifique de fonctions auxiliaires dans la bibliothèque d'exécution qui ne sont généralement pas accessibles aux programmeurs d'application. Selon le compilateur fabricant, la bibliothèque d'exécution on peut aussi contenir de la bibliothèque standard de chaque compilateur ou être contenue.

Également quelques fonctions qui peuvent être effectuées uniquement (ou sont plus efficaces ou exactes) au moment de l'exécution sont mis en œuvre dans la bibliothèque d'exécution, par exemple, certaines erreurs de logique, de la matrice de vérification de limites, de type dynamique de la vérification, la gestion des exceptions et, éventuellement, des fonctionnalités de débogage. Pour cette raison, certains bugs de programmation ne sont pas découverts jusqu'à ce que le programme est testé dans un environnement réel avec des données réelles, malgré sophistiqué au moment de la compilation de la vérification et de la pré-version d'essai. Dans ce cas, l'utilisateur final peut rencontrer un message d'erreur d'exécution.

Habituellement la bibliothèque d'exécution réalise de nombreuses fonctions en accédant au système d'exploitation. De nombreux langages de programmation ont intégré des fonctions qui n'ont pas nécessairement à être réalisé dans le compilateur, mais peut être mis en œuvre dans la bibliothèque d'exécution. De sorte que la frontière entre la bibliothèque d'exécution et de la bibliothèque standard est le compilateur fabricant. Par conséquent, une bibliothèque d'exécution est toujours spécifique au compilateur et à la plate-forme spécifique.

Le concept d'une bibliothèque d'exécution ne doit pas être confondue avec un simple programme de la bibliothèque comme celle créée par le programmeur de l'application ou livrés par un tiers ou une bibliothèque dynamique, ce qui signifie une bibliothèque de programmes liés au moment de l'exécution. Par exemple, le langage de programmation C ne nécessite qu'un minimum de la bibliothèque d'exécution (communément appelé crt0), mais définit une grande bibliothèque standard (appelée bibliothèque standard C) que la mise en œuvre de a à offrir.

14voto

plinth Points 26817

C est une langue et dans sa définition, il n'est pas nécessaire à toutes les fonctions disponibles pour vous. Pas d'IO, pas de routines mathématiques, et ainsi de suite. Par convention, il y a un ensemble de routines disponibles pour vous que vous pouvez lien dans votre exécutable, mais vous n'avez pas besoin de les utiliser. C'est, cependant, une chose commune à faire que la plupart des linkers ne vous demandons pas de lien vers les bibliothèques runtime C plus.

Il ya des moments où vous ne voulez pas eux - par exemple, en travaillant avec les systèmes embarqués, il pourrait être impossible d'avoir malloc, par exemple. J'ai l'habitude de travailler sur l'incorporation de l'PostScript dans les imprimantes et nous avons eu notre propre ensemble de bibliothèques d'exécution qui ont été beaucoup plus heureux sur des systèmes embarqués, de sorte que nous ne vous embêtez pas avec la "norme".

8voto

arinmorf Points 130

Le runtime library est la bibliothèque qui est automatiquement compilé en C programme à exécuter. La version de la bibliothèque vous utilisez dépend de votre compilateur, plate-forme, des options de débogage, et le multithreading options.

Une bonne description des différents choix pour les bibliothèques d'exécution: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html

Il comprend les fonctions que vous n'avez pas l'habitude de penser comme ayant besoin d'une bibliothèque à l'appel:

  • malloc
  • enum, struct
  • abs, min
  • affirmer

Microsoft a une belle liste de leurs fonctions de la bibliothèque runtime:

http://msdn.microsoft.com/en-us/library/2aza74he(SV.71).aspx

La liste exacte des fonctions varient selon le compilateur, donc pour iOS vous obtiendrez d'autres fonctions comme le dispatch_async() ou NSLog().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: