赞
踩
运行时库(Runtime library)通俗的说就是我们的程序运行的时候所依赖的库文件,在Windows平台这些库由微软提供,并且是以2种形式提供:静态库(lib)
、动态库(lib+dll)
。每个库还都提供debug
、release
2个版本。
C/C++运行时库从形式上来讲和我们自己开发的静态库、动态库没什么两样,只是它们由微软开发和维护,并提供了一些常用的功能支持(如malloc
,free
, printf
等等),如果我们的程序需要使用这些功能(事实上,只要是C/C++程序就一定会用到运行时库提供的功能),就要链接C/C++运行时库。我们可以自主选择是链接“静态库”还是“动态库”,是链接“debug版本”的还是“release版本”的。
大家可能注意到我们在平时开发中从来没有显式的来链接这些库,这是为什么了?
因为我们的编译器为我们提供了便利,我们只需要向编译器指定特定的编译选项(如MT、MD、MTd、MDd
),编译器就会自动链接对应的库。
同时,编译器会根据MT
和MD
来定义相应的预处理宏:MT
对应 _MT宏
,MD
对应_MD宏
。
例如,我们通过Visual Studio
开发C/C++程序时,在工程属性中配置“运行库”为MT、MD、MTd、MDd
中的一个:
就相当于间接的向编译器指定编译选项和定义相应的宏。
下表列出各种编译选项的含义以及对应的库文件:
类型 | 全称 | 含义 | 对应的库文件 | 备注 |
---|---|---|---|---|
ML | Single-Threaded | Release版的单线程静态库 | libc.lib | 从VS2005起被废弃 |
MLd | Single-Threaded Debug | Debug版的单线程静态库 | libcd.lib | 从VS2005起被废弃 |
MT | Multi-threaded | Release版的多线程静态库 | libcmt.lib | |
MTd | Multi-threaded Debug | Debug版的多线程静态库 | libcmtd.lib | |
MD | Multi-threaded DLL | Release版的多线程动态库 | msvcrt.lib + msvcrxxx.dll msvcprt.lib+msvcpxxx.dll | |
MDd | Multi-threaded DLL Debug | Debug版的多线程动态库 | msvcrtd.lib + msvcrxxxd.dll msvcprtd.lib + msvcpxxxd.dll |
如果计算机上安装了多个版本的VC++运行环境(或者多个版本的Visual Studio),则相同名称的lib或dll就会存在多份。如msvcrt.lib
文件:
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 Plus 即C++
100 = Version
d = Debug (不带d即为release版本)
静态库版
和动态库版
。debug版
和release版
。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。