当前位置:   article > 正文

理解C/C++运行时库_什么是运行时库

什么是运行时库

一、什么是运行时库

运行时库(Runtime library)通俗的说就是我们的程序运行的时候所依赖的库文件,在Windows平台这些库由微软提供,并且是以2种形式提供:静态库(lib)动态库(lib+dll)。每个库还都提供debugrelease 2个版本。

C/C++运行时库从形式上来讲和我们自己开发的静态库、动态库没什么两样,只是它们由微软开发和维护,并提供了一些常用的功能支持(如malloc,free, printf等等),如果我们的程序需要使用这些功能(事实上,只要是C/C++程序就一定会用到运行时库提供的功能),就要链接C/C++运行时库。我们可以自主选择是链接“静态库”还是“动态库”,是链接“debug版本”的还是“release版本”的。

二、如何链接运行时库

大家可能注意到我们在平时开发中从来没有显式的来链接这些库,这是为什么了?
因为我们的编译器为我们提供了便利,我们只需要向编译器指定特定的编译选项(如MT、MD、MTd、MDd),编译器就会自动链接对应的库。

同时,编译器会根据MTMD来定义相应的预处理宏:MT 对应 _MT宏MD对应_MD宏

例如,我们通过Visual Studio开发C/C++程序时,在工程属性中配置“运行库”为MT、MD、MTd、MDd中的一个:
这里写图片描述
就相当于间接的向编译器指定编译选项和定义相应的宏。

三、不同版本和形态的运行时库

3.1 运行时库对应的文件

下表列出各种编译选项的含义以及对应的库文件:

类型全称含义对应的库文件备注
MLSingle-ThreadedRelease版的单线程静态库libc.lib从VS2005起被废弃
MLdSingle-Threaded DebugDebug版的单线程静态库libcd.lib从VS2005起被废弃
MTMulti-threadedRelease版的多线程静态库libcmt.lib
MTdMulti-threaded DebugDebug版的多线程静态库libcmtd.lib
MDMulti-threaded DLLRelease版的多线程动态库msvcrt.lib + msvcrxxx.dll msvcprt.lib+msvcpxxx.dll
MDdMulti-threaded DLL DebugDebug版的多线程动态库msvcrtd.lib + msvcrxxxd.dll msvcprtd.lib + msvcpxxxd.dll

如果计算机上安装了多个版本的VC++运行环境(或者多个版本的Visual Studio),则相同名称的lib或dll就会存在多份。如msvcrt.lib文件:
这里写图片描述

3.2 运行时库文件命名规则

msvcr100d.dll为例:

ms = Microsoft
v = Visual
c = C Program
r = Run-time
100 = Version
d = Debug   (不带d即为release版本)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

msvcp100d.dll为例:

ms = Microsoft
v = Visual
cp = C Plus PlusC++
100 = Version
d = Debug   (不带d即为release版本)
  • 1
  • 2
  • 3
  • 4
  • 5

四、运行时库使用注意事项

  • 不要混合使用运行时库的静态库版动态库版
  • 不要混合使用运行时库的debug版release版
  • 不要混合使用不同版本的运行时库。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/467097
推荐阅读
相关标签
  

闽ICP备14008679号