- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
C 运行时库到底是什么,它有什么用?我一直在搜索,像魔鬼一样谷歌搜索,但我找不到比微软更好的东西:“微软运行时库提供了为微软 Windows 操作系统编程的例程。这些例程自动执行了许多常见的编程任务,而这些任务不是由微软提供的。 C 和 C++ 语言。”
好的,我明白了,但是例如,libcmt.lib
中有什么?它有什么作用?我认为 C 标准库是 C 编译器的一部分。那么 libcmt.lib
Windows 对 C 标准库函数的实现是否可以在 win32 下工作?
最佳答案
是的,libcmt 是 Microsoft 编译器提供的 C 标准库的(几个)实现。它们提供三种基本类型库的“调试”和“发布”版本:单线程(始终静态链接)、多线程静态链接和多线程动态链接(不过,根据您使用的编译器版本,其中一些可能不存在)。
因此,在名称“libcmt”中,“libc”是(或多或少)C 库的传统名称。 “mt”的意思是“多线程”。 “调试”版本将在末尾添加一个“d”,给出“libcmtd”。
就其包含的函数而言,C 标准(第 7 部分,如果您碰巧关心的话)定义了一组符合要求的(托管)实现必须提供的函数。大多数供应商(包括微软)自己添加各种其他功能(为了兼容性,提供标准功能 Unresolved 功能等)。在大多数情况下,它还将包含编译器使用的相当多的“内部”功能但最终用户通常不会。
运行时库基本上是一个大文件(或几个大文件——例如,在 UNIX 上,浮点函数传统上与其他函数分开存储)中这些函数的实现的集合。该大文件通常与 zip 文件具有相同的一般顺序,但没有任何压缩,因此它基本上只是将一些小文件收集在一起并一起存储到一个更大的文件中。存档通常至少包含一些索引,以便相对快速/容易地从内部文件中查找和提取数据。至少有时,微软使用了一种带有“扩展”索引的库格式,链接器可以使用它来查找在哪些子文件中实现了哪些功能,因此它可以更快地找到并链接到它需要的部分(但这是纯粹是一种优化,而不是要求)。
如果您想获得“libcmt”中函数的完整列表(使用您的示例),您可以打开其中一个 Visual Studio 命令提示符(通常在“Visual Studio 工具”下),切换到所在目录您的库已安装,然后键入以下内容:lib -list libcmt.lib
它将生成一个(长)列表,其中包含该库中所有目标文件的名称。这些并不总是直接对应于函数的名称,但通常会给出一个想法。如果你想查看一个特定的目标文件,你可以使用 lib -extract
提取其中一个目标文件,然后使用 dumpbin /symbols <object file name>
查找特定目标文件中的函数。
关于c - 什么是 C 运行时库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2766233/
我是一名优秀的程序员,十分优秀!