什么是MSVC运行库(CRT)?
MSVC(Microsoft Visual C++)的运行库是一组库文件,它们包含了一些常用的函数和数据结构,可以在程序运行时被调用。这些库文件通常会被编译到程序中,以提高程序的性能和可移植性。
MSVC的运行库包括以下几个部分:
- 标准库:包含了一些基本的函数和数据结构,如字符串、数组、链表等。
- 数学库:包含了一些数学函数,如三角函数、对数函数、指数函数等。
- 图形库:包含了一些图形绘制函数,如绘制直线、矩形、圆形等。
- 网络库:包含了一些网络通信函数,如套接字编程、TCP/IP协议等。
- 数据库库:包含了一些数据库操作函数,如连接数据库、执行SQL语句等。
除了上述几个部分外,MSVC还提供了其他一些运行库,如多线程库、加密解密库、XML解析库等。这些库可以根据需要进行选择和使用。
MSVC的运行库有哪些?
MSVC运行库通常包括以下几种:
- Multi-threaded DLL (/MD):多线程 DLL 运行库,适用于多线程应用程序。
- Multi-threaded Debug DLL (/MDd):多线程调试 DLL 运行库,适用于多线程调试应用程序。
- Multi-threaded (/MT):多线程运行库,适用于多线程应用程序和调试应用程序。
- Multi-threaded Debug (/MTd):多线程调试运行库,适用于多线程调试应用程序和调试应用程序。
- Single-threaded (/ST):单线程运行库,适用于单线程应用程序和调试应用程序。
- Single-threaded Debug (/STd):单线程调试运行库,适用于单线程调试应用程序和调试应用程序。
- Dynamic-Link Library (/LD):动态链接库运行库,适用于 Windows 应用程序。
- Static-Link Library (/LIB):静态链接库运行库,适用于 Windows 应用程序。
备注:目前VS已经不支持单线程的运行库。
如何设置C/C++运行库
- 在 Visual Studio 中打开要配置的项目。
- 选择“属性”菜单,并选择“配置属性”>“C/C++”>“代码生成”。
- 在“运行库”下拉菜单中选择你需要使用的运行库,默认值一般为“多线程调试 DLL (/MDd)”。
多线程 (/MT)、多线程调试 (/MTd)、多线程 DLL (/MD)、多线程调试 DLL (/MDd)的区别
多线程 (/MT)、多线程调试 (/MTd)、多线程 DLL (/MD)、多线程调试 DLL (/MDd) 都是用于支持多线程的运行库选项。它们的区别在于是否包含调试符号信息和是否生成调试信息。
- 多线程 (/MT): 该选项适用于单线程应用程序和调试应用程序,并启用了多线程支持,但不包含调试符号信息和调试信息。
- 多线程调试 (/MTd): 该选项适用于多线程调试应用程序,并启用了多线程支持和调试符号信息,但不生成调试信息。
- 多线程 DLL (/MD): 该选项适用于多线程 DLL 应用程序,并启用了多线程支持和调试符号信息,但不生成调试信息。
- 多线程调试 DLL (/MDd): 该选项适用于多线程调试 DLL 应用程序,并启用了多线程支持、调试符号信息和调试信息。
VC++项目如何选择运行库?
在Debug模式下,使用调试运行库:多线程调试(/MTd)、多线程调试DLL(/MDd)
在Release模式下,使用发布运行库:多线程(/MT)、多线程DLL(/MD)
Debug模式下运行库带d,但Release模式不带。调试与发布的区别在于,Release模式省略了程序的调试信息,就是删除了Debug模式下的用于调试的内容,Release模式下生成的可执行文件的大小一般比Debug模式下生成的要小。
静态链接:多线程(/MT)、多线程调试(/MTd)
动态链接:多线程DLL(/MD)、多线程调试DLL(/MDd)
动态链接为D,静态链接为T。两者的区别在于,静态链接将程序所依赖的运行库集成到了可执行文件中,可执行文件运行时不再需要运行库;动态链接没有把程序所依赖的运行库集成到可执行文件中,可执行文件运行时需要运行库。
静态连接生成的可执行文件的大小一般大于动态链接生成的。
VS 的VC++项目,默认Release模式会选择 多线程DLL(/MD),Debug模式会选择多线程调试DLL(/MDd)。但有些情况下,如果你依赖了第三方库(比如google test)。默认情况下,google test会被构建成静态库,因此我们在使用了google test的vc++项目就需要选择多线程调试(/MTd)或者 多线程(/MT),否则单元测试无法正常运行。 具体可以参考 [C++] 基础教程 - 如何使用google test进行单元测试
总结
本文简单介绍了MSVC的常用的几种运行库“多线程 (/MT)、多线程调试 (/MTd)、多线程 DLL (/MD)、多线程调试 DLL (/MDd)”以及他们之间的区别。