首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是C运行时库?

什么是C运行时库?
EN

Stack Overflow用户
提问于 2010-05-04 22:37:53
回答 3查看 86K关注 0票数 190

什么是C运行时库,它是用来做什么的?我一直在搜索,像魔鬼一样用谷歌搜索,但我找不到比微软的更好的东西了:“微软的运行时库为Microsoft Windows操作系统提供了编程例程。这些例程自动化了许多C和C++语言没有提供的常见编程任务。”

好的,我明白了,但是举个例子,libcmt.lib里面是什么?是干什么的呢?我认为C标准库是C编译器的一部分。那么,libcmt.lib Windows的C标准库函数实现是否可以在win32下工作呢?

EN

回答 3

Stack Overflow用户

发布于 2017-02-21 13:02:55

我自己也问过这个问题,几个小时以来我的大脑一直很痛。仍然没有找到任何真正有意义的东西。每个在主题中写东西的人都不能真正地“授课”。如果你想教一个人,选择一个人能理解的最基本的语言,这样他就不需要在处理一个话题时关心其他话题。因此,我给自己得出了一个似乎适合所有这些混乱的结论。

在C编程语言中,每个程序都以main()函数开头。其他语言可能会定义程序启动的其他函数。但是处理器不知道main()。处理器只知道由01的组合表示的预定义命令。

在微处理器编程中,没有底层操作系统(Microsoft Windows、Linux、MacOS等),您需要通过设置在处理器已知的命令内迭代和跳转(循环、函数调用)的ProgramCounter (PC)来明确地告诉处理器从哪里开始。您需要知道RAM有多大,需要设置程序堆栈的位置(局部变量),以及堆的位置(动态变量)和全局变量的位置(我猜它被称为SSA?)在内存中。单个处理器一次只能执行一个程序。

这就是操作系统的用武之地。操作系统本身是一个在处理器上运行的程序。允许执行自定义代码的程序。通过在程序(加载到RAM中)的执行代码之间切换,一次运行多个程序。但是操作系统是一个程序,每个程序的编写方式都不同。简单地将您的自定义程序的代码放入RAM中将不会运行它,操作系统不知道它。你需要在注册你的程序的操作系统上调用函数,告诉操作系统程序需要多少内存,程序的入口点在哪里(C语言中的main()函数)。我猜这就是运行时库中的位置,它解释了为什么每个操作系统都需要一个特殊的库,因为这些只是程序本身,有不同的功能来做这些事情。

这也解释了为什么它不像.dll文件那样在运行时动态链接,即使它被称为运行时库。运行库需要静态链接,因为程序启动时需要它。运行库在运行时将自定义程序注入/连接到另一个程序(操作系统)。这真的会引起一些脑力衰竭..。

结论:运行时库命名失败。早期可能没有.dll (在运行时链接),也不存在理解差异的问题。但即使这是真的,这个名字也选错了。

运行时库的更好的名称可以是: StartupLibrary/OSEntryLibrary/SystemConnectLibrary/OSConnectLibrary

希望我没弄错,准备改正/扩展。干杯。

票数 32
EN

Stack Overflow用户

发布于 2010-05-04 22:53:35

如果您在从C或C++编译的可执行文件上使用像Dependency Walker这样的工具,您将看到它所依赖的DLL之一是MSVCRT.DLL。这是Microsoft C运行时库。如果你用DW进一步研究MSVCRT.DLL,你会发现这是所有像printf(),put(0,get(),atoi()等函数的地方。

票数 6
EN

Stack Overflow用户

发布于 2010-05-04 22:49:55

Win32软件开发工具包提供了三种形式的C运行时库:

* LIBC.LIB is a statically linked library for single-threaded programs.
* LIBCMT.LIB is a statically linked library that supports multithreaded programs.
* CRTDLL.LIB is an import library for CRTDLL.DLL that also supports multithreaded programs. CRTDLL.DLL itself is part of Windows NT. 

MicrosoftVisualCRT32位版本也包含这三种形式,但是,C++中的MSVCRT.LIB是可再发行的。其名称取决于VC++的版本(即MSVCRT10.DLL或MSVCRT20.DLL)。但是请注意,Win32s不支持MSVCRT10.DLL,而Win32s支持CRTDLL.LIB。MSVCRT20.DLL有两个版本:一个用于Windows NT,另一个用于Win32s。

请参阅:http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2766233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档