msvcrt的链接
运行时库
运行时库(Runtime library)通俗的说就是我们的程序运行的时候所依赖的库文件,从形式上来讲和我们自己开发的静态库、动态库没什么两样,只是它们由微软开发和维护,并提供了一些常用的功能支持(如malloc,free, printf等等),如果我们的程序需要使用这些功能(事实上,只要是C/C++程序就一定会用到运行时库提供的功能),就要链接C/C++运行时库。上次弄了半天也没找到链接msvcrt的方法,今天在又一次学习静态库和静态库的时候发现了.
这是c语言链接的方式,VS已经在背地里偷偷帮你做了,你只需要#include<头文件>就可以调用函数了,通过命令行命令VS自动帮你#pragma comment()了.
C语言标准库 | 特征 | 选项 | 预处理器指令 |
---|---|---|---|
libcmt.lib | 将本机 CRT 启动静态链接到你的代码。 | /MT | _MT |
libcmtd.lib | 静态链接本机 CRT 启动的调试版本。 不可再发行。 | /MTd | _DEBUG, _MT |
msvcrt.lib 和 msvcrxxx.dll | 与 DLL UCRT 和 vcruntime 一起使用的本机 CRT 启动的静态库。 | /MD | _MT, _DLL |
msvcrtd.lib 和 msvcrxxxd.dll | 与 DLL UCRT 和 vcruntime 一起使用的本机 CRT 启动调试版本的静态库, 不可再发行。 | /MDd | _DEBUG, _MT, _DLL |
下面是C++运行时的标准库链接方法
C++ 标准库 | 特征 | 选项 | 预处理器指令 |
---|---|---|---|
libcpmt.lib | 多线程, 静态链接 | /MT | _MT |
msvcprt.lib 和 msvcpxxx.dll | 多线程动态链接(MSVCPversion.dll 的导入库) | /MD | _MT, _DLL |
libcpmtd.lib | 多线程, 静态链接 | /MTd | _DEBUG, _MT |
msvcprtd.lib 和 msvcpxxxd.dll | 多线程动态链接(MSVCPversionD.DLL 的导入库) | /MDd | _DEBUG, _MT, _DLL |
xxx代表版本,cp的意思就是c++,d就是debug版本的意思,最后没有d就是release版了. 同样也是VS偷偷帮我们做的.
具体链接什么库取决于源文件后缀是.c还是.cpp(即/TC,还是/TP选项).
更加详细的内容见微软文档,部分内容我现在还是理解不了的.比如文档特征部分. 点这里