VC++编译时运行库选择(/MT、/MTd、/MD、/MDd)

在VS中,项目属性 -> C/C++ -> 代码生成 -> 运行库 选项内有四个选项:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)。这个设置代表什么意思?四个选项又是什么意思,有什么区别?接下来详细讨论。

何为C运行库、C++标准库

C标准定义了一系列常用函数,成为C库函数。C标准仅仅定义了函数原型,没有提供实现。

因此这个任务留给了各个支持C语言标准的编译器。每个编译器通常实现了标准C的超集,称为C运行时库(C Run-Time Library)。

C Run-Time Library包含了C程序运行的最基本和最常用的函数,没有C Run-Time Library则main()函数不会被调用,exit()也不能被响应。C运行库与平台相关。

到了C++的世界,有了另外一个概念:Standard C++ Library。因为C++是C的超集,所以Standard C++ Library包括了C Run-Time Library和STL。

VC++针对C++加入的Standard C++ Library主要包括:libcp.lib、libcpmt.lib、msvcprt.lib。

在Windows环境下,VC++提供的C Run-Time Library又分为动态运行时库和静态运行时库。

动态运行时库主要是DLL库文件msvcrt.dll(VC6.0之后是msvcr100.dll等),静态运行时库对应的主要文件是libc.lib(Single thread static library,retail version)、LIBCMT.LIB(Multithread static library,retail version)。msvcrt.dll运行时库提供几千个C函数,包括printf,程序运行时很大部分时间都是在这些运行库中。到底使用哪些库取决于你的编译器及编译选项:/MT、/MTd、/MD、/MDd。

编译器中运行库设置

/MT、/MTd、/MD、/MDd各选项区别

  • MT选项:链接LIB版的C和C++运行库。在链接时就会将C和C++运行时库(LIBCMT.LIB、LIBC.LIB)集成到程序中,程序体积会变大。
  • MTd选项:LIB的调试版。
  • MD选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对应的DLL,程序体积会减小,缺点是在系统中没有对应DLL程序时无法运行(需添加MSVCPxx.DLL、MSVCRxx.DLL)。
  • MDd选项:表示使用DLL的调试版。
posted @ 2022-05-19 07:30  NoCirc1e  阅读(692)  评论(0编辑  收藏  举报