理解C/C++运行时库

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版本)

msvcp100d.dll为例:

ms = Microsoft
v = Visual
cp = C Plus PlusC++
100 = Version
d = Debug   (不带d即为release版本)

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

  • 不要混合使用运行时库的静态库版动态库版
  • 不要混合使用运行时库的debug版release版
  • 不要混合使用不同版本的运行时库。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

china_jeffery

你的鼓励是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值