Oui, libcmt est (l'une des nombreuses) implémentations de la bibliothèque standard C fournie avec le compilateur de Microsoft. Ils fournissent à la fois des versions "debug" et "release" de trois types de bibliothèques de base: monothread (toujours lié statiquement), multithread lié statiquement et multithread lié dynamiquement (bien que, selon la version du compilateur vous utilisation, certains d'entre eux peuvent ne pas être présents).
Ainsi, dans le nom "libcmt", "libc" est le nom traditionnel (plus ou moins) de la bibliothèque C. Le "mt" signifie "multi-thread". Une version "debug" aurait un "d" ajouté à la fin, donnant "libcmtd".
En ce qui concerne les fonctions qu'il inclut, le standard C (partie 7, si vous vous en souciez) définit un ensemble de fonctions qu'une implémentation conforme (hébergée) doit fournir. La plupart des fournisseurs (y compris Microsoft) ajoutent eux-mêmes diverses autres fonctions (pour la compatibilité, pour fournir des fonctionnalités que les fonctions standard ne traitent pas, etc.) Dans la plupart des cas, il contiendra également un certain nombre de fonctions "internes" 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 utiliser votre exemple), vous pouvez ouvrir l'une des invites de commande de Visual Studio (sous "Visual Studio Tools", normalement), basculer vers le répertoire où se trouvaient vos bibliothèques installé, et tapez quelque chose comme: lib -list libcmt.lib
et cela générera une ( longue ) liste des noms de tous les fichiers objets de cette bibliothèque. Ceux-ci ne correspondent pas toujours directement aux noms des fonctions, mais donneront généralement une idée. Si vous voulez regarder un fichier objet particulier, vous pouvez utiliser lib -extract
pour extraire un de ces fichiers objet, puis utiliser dumpbin /symbols <object file name>
pour trouver quelle (s) fonction (s) est / sont dans ce fichier objet particulier.
strcpy
fonction de la bibliothèque standard C, par exemple, aurait-elle son implémentation dans la bibliothèque d'exécution, ou aurait-elle simplement son code dans des fichiers .c normaux?Au début, nous devons comprendre ce qu'est une bibliothèque d'exécution; et pensez à ce que cela pourrait signifier par "Microsoft C Runtime Library".
voir: http://en.wikipedia.org/wiki/Runtime_library
J'ai posté la plupart de l'article ici car il pourrait être mis à jour.
la source
Je me suis juste posé la question moi-même et je me suis fait mal au cerveau pendant quelques heures. Je n'ai toujours rien trouvé qui fasse vraiment un point. Quiconque écrit quelque chose sur un sujet ne peut pas réellement «enseigner». Si vous voulez enseigner à quelqu'un, prenez la langue la plus élémentaire qu'une personne comprend, afin qu'elle n'ait pas besoin de se soucier des autres sujets lors du traitement d'un sujet. Je suis donc parvenu à une conclusion pour moi-même qui semble bien s'intégrer dans tout ce chaos.
Dans le langage de programmation C, chaque programme commence par la
main()
fonction. D'autres langages peuvent définir d'autres fonctions où le programme démarre. Mais un processeur ne connaît pas lemain()
. Un processeur ne connaît que les commandes prédéfinies, représentées par des combinaisons de0
et1
.Dans la programmation par microprocesseur, n'ayant pas de système d'exploitation sous-jacent (Microsoft Windows, Linux, MacOS, ..), vous devez indiquer explicitement au processeur par où commencer en définissant le
ProgramCounter
(PC) qui itère et saute (boucles, appels de fonction) dans le commandes connues du processeur. Vous devez savoir quelle est la taille de la RAM, vous devez définir la position de la pile de programmes (variables locales), ainsi que la position du tas (variables dynamiques) et l'emplacement des variables globales (je suppose que cela s'appelait SSA ?) dans la RAM. Un seul processeur ne peut exécuter qu'un seul programme à la fois.C'est là que le système d'exploitation entre en jeu. Le système d'exploitation lui-même est un programme qui s'exécute sur le processeur. Un programme qui permet l'exécution de code personnalisé. Exécute plusieurs programmes à la fois en basculant entre les codes d'exécution des programmes (qui sont chargés dans la RAM). Mais le système d'exploitation EST UN PROGRAMME, chaque programme est écrit différemment. Le simple fait de mettre le code de votre programme personnalisé dans la RAM ne le fera pas fonctionner, le système d'exploitation ne le sait pas. Vous devez appeler des fonctions sur le système d'exploitation qui enregistre votre programme, indiquer au système d'exploitation la quantité de mémoire dont le programme a besoin, où se trouve le point d'entrée dans le programme (le
main()
fonction en cas de C). Et c'est ce que je suppose qui se trouve dans la bibliothèque d'exécution, et explique pourquoi vous avez besoin d'une bibliothèque spéciale pour chaque système d'exploitation, car ce ne sont que des programmes eux-mêmes et ont des fonctions différentes pour faire ces choses.Cela explique également pourquoi il n'est PAS lié dynamiquement au moment de l'exécution car
.dll
sont les fichiers, même si cela s'appelle une bibliothèque RUNTIME. La bibliothèque d'exécution doit être liée de manière statique, car elle est nécessaire au démarrage de votre programme. La bibliothèque d'exécution injecte / connecte votre programme personnalisé dans / à un autre programme (le système d'exploitation) à RUNTIME. Cela provoque vraiment un cerveau f ...Conclusion: RUNTIME Library est un échec de dénomination. Il n'y a peut-être pas eu de
.dll
(liaison au moment de l'exécution) dans les premiers temps et le problème de la compréhension de la différence n'existait tout simplement pas. Mais même si c'est vrai, le nom est mal choisi.De meilleurs noms pour la bibliothèque d'exécution pourraient être: StartupLibrary / OSEntryLibrary / SystemConnectLibrary / OSConnectLibrary
J'espère que j'ai bien compris, pour correction / expansion. à votre santé.
la source
C est un langage et dans sa définition, aucune fonction ne doit être mise à votre disposition. Pas d'E / S, pas de routines mathématiques et ainsi de suite. Par convention, il existe un ensemble de routines disponibles que vous pouvez lier à votre exécutable, mais vous n'avez pas besoin de les utiliser. Cependant, c'est une chose tellement courante à faire que la plupart des éditeurs de liens ne vous demandent plus de créer un lien vers les bibliothèques d'exécution C.
Il y a des moments où vous n'en voulez pas - par exemple, lorsque vous travaillez avec des systèmes embarqués, il peut être peu pratique d'avoir malloc, par exemple. J'avais l'habitude de travailler sur l'intégration de PostScript dans des imprimantes et nous avions notre propre ensemble de bibliothèques d'exécution qui étaient beaucoup plus heureux sur les systèmes embarqués, donc nous ne nous sommes pas préoccupés du "standard".
la source
La bibliothèque d'exécution est cette bibliothèque qui est automatiquement compilée pour tout programme C que vous exécutez. La version de la bibliothèque que vous utiliseriez dépend de votre compilateur, de votre plate-forme, des options de débogage et des options de multithreading.
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 inclut les fonctions que vous ne pensez normalement pas avoir besoin d'une bibliothèque à appeler:
Microsoft a une belle liste de leurs fonctions de bibliothèque d'exécution:
http://msdn.microsoft.com/en-us/library/2aza74he(VS.71).aspx
La liste exacte des fonctions varie en fonction du compilateur, donc pour iOS, vous obtiendrez d'autres fonctions comme dispatch_async () ou NSLog ().
la source
Si vous utilisez un outil tel que Dependency Walker sur un exécutable compilé à partir de C ou C ++, vous verrez que l'une des DLL dont il dépend est MSVCRT.DLL. Il s'agit de la bibliothèque Microsoft C Runtime. Si vous examinez plus en détail MSVCRT.DLL avec DW, vous verrez que c'est là que toutes les fonctions comme printf (), met (0, gets (), atoi () etc. live.
la source
Je pense que la définition de Microsoft signifie vraiment:
la source
Il existe trois formes de la bibliothèque d'exécution C fournie avec le SDK Win32:
L'édition 32 bits de Microsoft Visual C ++ contient également ces trois formulaires, cependant, le CRT dans une DLL est nommé MSVCRT.LIB. La DLL est redistribuable. Son nom dépend de la version de VC ++ (c'est-à-dire MSVCRT10.DLL ou MSVCRT20.DLL). Notez cependant que MSVCRT10.DLL n'est pas pris en charge sur Win32s, tandis que CRTDLL.LIB est pris en charge sur Win32s. MSVCRT20.DLL est disponible en deux versions: une pour Windows NT et l'autre pour Win32s.
voir: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9
la source