注: 以下内容部分引自CSND中相关讨论的帖子,并结合自己的理解整理而成。仅供参考。
1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.
2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的 LIBRARY,C run-time library 就是这样形成的。
3)随后,随着 C 语言的流行,各个 C 编译器的生产商/个体/团体都遵循老的传统,在不同平台上都有相对应的 Standard Library,但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别,所以就有了 ANSI C;ANSI C (主观意图上)详细的规定了 C 语言各个要素的具体含义和编译器实现要求,引进了新的函数声明方式,同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数,应当称为第三方 C 运行库(Third party C run-time libraries)。
4)C run-time library里面含有初始化代码,还有错误处理代码(例如divide by zero处理)。你写的程序可以没有math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C run-time库,main()就不会被调用,exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。
5)到了 C++ 世界里,有另外一个概念:Standard C++ Library,它包括了上面所说的 C run-time library 和 STL。包含 C run-time library 的原因很明显,C++ 是 C 的超集,没有理由再重新来一个 C++ run-time library. VC针对C++ 加入的Standard C++ Library主要包括:LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB
6)Windows环境下,VC提供的 C run-time library又分为动态运行时库和静态运行时库。
动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文件是MSVCRT.LIB(MSVCRTD.LIB for debug build)
静态运行时库(release版)对应的主要文件是:
LIBC.LIB (Single thread static library, retail version)
LIBCMT.LIB (Multithread static library, retail version)
msvcrt.dll提供几千个C函数,即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时,很大一部分时间时在这些运行库里运行。在你的程序(release版)被编译时,VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件 (libc.lib,libcmt.lib或Import library msvcrt.lib)链接进来。
编译时到底哪个C run-time library联入你的程序取决于编译选项:
/MD, /ML, /MT, /LD (Use Run-Time Library)
你可以VC中通过以下方法设置选择哪个C run-time library联入你的程序:
To find these options in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Code Generation in the Category box. See the Use Run-Time Library drop-down box.
从程序可移植性考虑,如果两函数都可完成一种功能,选运行时库函数好,因为各个 C 编译器的生产商对标准C Run-time library提供了统一的支持.
分享到:
相关推荐
MingW VC 之.a .lib .dll .def 关系主要涉及的是在Windows环境下,使用Microsoft Visual C++ (MSVC) 和 MinGW 工具链编译C或C++程序时,不同类型的文件及其相互关系。这里主要讲解的是库文件、动态链接库(DLL)、导...
png+libpng.lib+libpng16.dll+zlib.lib四个C语言使用libPNG开发需要用到的 一:libpng库的编译 环境:windows10 + VS2013 需要下载:libpng, zlib两个库 下载地址: libpng:...
在MySQL 5.7.22版本中,libmysql.dll和libmysql.lib可能包含了以下改进: 1. **性能提升**:MySQL 5.7引入了InnoDB存储引擎的多项性能优化,包括更快的索引访问、更有效的内存管理以及更好的查询优化。 2. **安全...
在Windows操作系统环境中,开发人员有时需要使用特定的动态链接库(Dynamic Link Library,简称DLL)和静态库(Library,简称LIB)文件来扩展其应用程序的功能。`libnet.dll` 和 `libnet.lib` 是这样的一个例子,...
开发者在编写应用程序时,可以将`TSCLIB.lib`链接到项目中,这样编译后的可执行文件就能直接使用`TSCLIB.dll`提供的功能,而无需在运行时再查找和加载`dll`。`lib`文件包含了对`dll`中函数的引用,使得编译过程能够...
在实际应用中,使用routerdial.dll及其关联的lib和头文件的步骤大致如下: 1. **包含头文件**:在源代码中,通过`#include "routerdial_supp.h"`引入头文件,获取函数声明。 2. **链接lib文件**:在编译阶段,将...
描述中的内容再次强调了这个压缩包包含的组件:lib文件(即静态链接库)、dll文件(动态链接库)和头文件。dll文件(如libssl.dll和libcrypto.dll)是在运行时提供函数调用的共享库,它们可以被多个进程同时使用,...
在标题和描述中提到的问题,就是关于如何在Qt项目中正确地链接MySQL 5.7版本的`libmysql.dll`和`libmysql.lib`文件。 首先,`libmysql.dll`是一个动态链接库,它包含了运行时执行MySQL连接和查询所需的代码。在...
标题中的“libmysql.dll和libmysql.lib for Windows (x86, 64-bit)[Win10能用]”指的是两个关键的MySQL客户端库文件,适用于64位的Windows 10操作系统。libmysql.dll是动态链接库文件,而libmysql.lib是静态链接库...
在本主题中,我们将深入探讨如何解决“数据库驱动无法加载”这一常见问题,特别是涉及到`libmysql.lib`和`libmysql.dll`这两个关键库文件。 `libmysql.lib`和`libmysql.dll`是MySQL数据库客户端连接器的重要组成...
在Win10上安装Shapely时,需要解决两个关键的依赖项:`geos.dll`和`geos_c.dll`。 `geos.dll`是GEOS库的动态链接库文件,它是Shapely能够运行的基础。这个库实现了基于C++的OpenGIS简单特征规范(Simple Features ...
这两个文件是动态链接库(DLL)和静态链接库(LIB)的形式,它们在Windows系统中扮演着关键角色,为开发者提供必要的函数调用和资源,以实现与TSC打印机的通信。 动态链接库(DLL)是Windows操作系统中的一个共享库...
这里我们关注的是"PCOMM.dll"、"PCOMM.h"和"PCOMM.lib",这三个文件在Windows编程中尤其常见,特别是在C或C++开发中。 首先,`PCOMM.dll`是动态链接库文件。DLL文件包含了可被多个程序共享的代码和数据,这样可以...
在提供的压缩包中,除了`sqlite3.lib`和`sqlite3.dll`,通常还会包含`sqlite3.h`头文件。这个文件定义了SQLite的C语言接口,包括函数原型、数据结构和常量。开发者在编写代码时需要包含这个头文件,以便能够正确地...
标题中的"cyusb.dll、cyapi.h、cyapi.lib"是CyUSB库的关键组件,用于在Windows操作系统上与 Cypress 半导体公司的USB设备进行通信。这些组件在开发USB驱动程序或应用程序时扮演着重要角色,特别是对于VB(Visual ...
标题中的“rxtxParallel.dll”和“rxtxSerial.dll”是RXTX库的两个关键组件,它们主要用于在Windows 64位系统中进行串行和并行通信。RXTX是一个开源的Java库,它提供了与硬件交互的能力,特别是通过串行和并行端口。...
描述提到的"libyuv编译完的.lib.dll文件以及整个debug文件夹"指出这包含的是编译完成的libyuv库,不仅有.lib和.dll形式,还有Debug版本的文件夹。Debug版本通常用于开发阶段,它包含了调试信息,可以帮助开发者在...
标题"libraw.lib和libraw.dll 下载 vs2015 版本"提及了两个关键组件:libraw.lib和libraw.dll,它们是针对Visual Studio 2015(VS2015)的特定版本。libraw是一个开源库,用于读取数字相机原始图像数据,而libraw....
首先,头文件(.h)是C或C++编程中的关键组成部分,它们包含了函数声明、数据结构定义和其他必要的编译时信息。例如,`hidpi.h`, `hid.lib`, `hidsdi.h` 和 `hidusage.h` 都是与USB Human Interface Device (HID)类...
总之,"短信猫dllforvc .dll.h.lib完整可用"是一个针对Visual C++开发者的短信猫通信库,提供了完整的开发文件,包括动态库、头文件和导入库,方便开发者快速集成短信发送和接收功能到自己的应用中。对于需要短信...