什么是C运行时库?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

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

比如说,libcmt.lib是吗?它是干什么用的?我认为C标准库是C编译器的一部分。也是libcmt.libWindows实现C标准库函数在Win 32下工作?

提问于
用户回答回答于

是的,libcmt是微软编译器提供的C标准库的(几个)实现之一。它们提供了三种基本类型库的“调试”和“发布”版本:单螺纹(总是静态链接),多线程静态链接,和多线程动态链接。

因此,在名称“libcmt”中,“libc”是C库的(或多或少)传统名称。“mt”的意思是“多线程”。一个“调试”版本的末尾会添加一个“d”,给出“libcmtd”。

至于它包含哪些功能,C标准实现必须提供的一组函数。大多数供应商(包括微软)自己添加了各种其他功能(为了兼容性,提供标准函数所不具备的功能,等等)。在大多数情况下,它还将包含大量编译器使用的“内部”函数,但最终用户通常不会使用这些函数。

如果想获得“libcmt”中函数的完整列表,可以打开一个VisualStudio命令提示(通常在“Visual Studio Tools”下),切换到安装库的目录,并键入如下内容:lib -list libcmt.lib它会产生一个()库中所有对象文件的名称列表。这些并不总是一致的直接对函数的名称,但一般会给出一个想法。如果要查看特定的对象文件,可以使用lib -extract若要提取其中一个对象文件,请使用“dumpbin/符号”查找该特定对象文件中的/are函数。

用户回答回答于

首先,我们应该理解什么是运行时库;并考虑一下“MicrosoftC运行时库”可能意味着什么。

当计算机程序的源代码被编译器翻译成相应的目标语言时,如果程序中的每个命令和对内置函数的每次调用都会导致目标语言中完整的相应程序代码的就地生成,则会导致程序代码的极端增大。相反,编译器通常在运行时库中使用应用程序程序员无法访问的特定于编译器的辅助函数。根据编译器制造商的不同,运行时库有时也会包含相应编译器的标准库,或者包含在其中。 此外,在运行时库中实现了一些只能在运行时执行(或更有效或更准确)的功能,例如一些逻辑错误、数组边界检查、动态类型检查、异常处理以及可能的调试功能。由于这个原因,一些编程错误直到程序在一个有真实数据的“实时”环境中被测试时才被发现,尽管有复杂的编译时检查和预发布测试。在这种情况下,最终用户可能会遇到运行时错误消息。 运行库通常通过访问操作系统来实现多种功能。许多编程语言都有内置函数,这些函数不一定要在编译器中实现,而是可以在运行时库中实现。因此,运行库和标准库之间的边界取决于编译器制造商。因此,运行库始终是编译器特定的和平台特定的。运行时库的概念不应与普通的程序库相混淆,比如由应用程序程序员创建的程序库,或者由第三方或动态库交付的程序库,即在运行时链接的程序库。例如,编程语言C只需要一个最小的运行时库(通常称为crt 0),但定义了每个实现必须交付的大型标准库(称为C标准库)。

扫码关注云+社区