什么是C运行时库
C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.
如果没有了C run-time库,main()就不会被调用,exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。
C运行时库除了给我们提供必要的库函数调用(如memcpy、printf、malloc等)之外,它提供的另一个最重要的功能是为应用程序添加启动函数。C运行时库启动函数的主要功能为进行程序的初始化,对全局变量进行赋初值,加载用户程序的入口函数。
Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序调用;而另一个版本供多线程应用程序调用。单线程运行时库与多线程运行时库有两个重大差别,分别如下。
类似errno的全局变量,每个线程单独设置一个,这样从每个线程中可以获取正确的错误信息。多线程库中的数据结构以同步机制加以保护,这样可以避免访问时的冲突。
Visual C++提供的多线程运行时库又分为静态链接库和动态链接库两类,而每一类运行时库又可再分为Debug版本和Release版本,因此Visual C++共提供了6个运行时库,如表1.5所示。
表1.5 Visual C++提供的C运行时库
C运行时库 | 库文件 |
Single thread(static link) | libc.lib |
Debug single thread(static link) | libcd.lib |
MultiThread(static link) | libcmt.lib |
Debug multiThread(static link) | libcmtd.lib |
MultiThread(dynamic link) | msvert.lib |
Debug multiThread(dynamic link) | msvertd.lib |
vs 工具上修改地方是:“项目 -> C/C++ ->代码生成 -> 运行库
对于C运行时库CRT,VC6.0、VC2005、VC2008和VC2010均提供了DLL版本和LIB版本。上述各个编译器提供的LIB版的CRT库,均实现在libcmt.lib。对应的调试版名称为libcmtd.lib。
而DLL版本名称根据编译器不同而不同,我们可以从名称上加以分辨。
VC6.使用的CRT库的DLL版本在MSVCRT.DLL中实现, 对应调试版本为MSVCRTD.LIB。
VC2005使用的CRT库的DLL版本在MSVCR80.DLL中实现,对应调试版本为MSVCR80.DLL。
VC2008使用的CRT库的DLL版本在MSVCR90.DLL中实现,对应调试版本为MSVCR90D.DLL。
VC2010使用的CRT库的DLL版本在MSVCR100.DLL中实现,对应调试版本为MSVCR100D.DLL。
具体的MT MTd MD MDd介绍见: