VS MD MT MDd MTd配置

发布于 2020-11-08  233 次阅读


基础知识

MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库

MTd:mutithread+debug,多线程调试版,连接LIBMITD.lib库

MD:MT+DLL,多线程动态库,连接MSVCRT.lib库,这是个导入库,对应动态库为MSVCRT.dll

MDd: MT+DLL+debug,多线程动态调试库,连接MSVCRTD.lib库,对应动态库为MSVCRTD.dll

开发多线程程序时(单线程本文不做讨论),需要选择MT、MTd、MD、MDd其中的一个。

开发静态库适应 MD MDd MT MTd 运行时

https://blog.csdn.net/p13503959390/article/details/73823989
  1. 生成lib文件的源码中不能使用 Standard C++ Library
    在源代码中不能包含 <string><vector> 等类似这样的C++标准定义的头文件, 否则会出现类似下边的错误
1>StaticLib.lib(StaticLib.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项:  值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”(LibDemo.obj 中)
  1. 设置编译器参数: Zl
    C/C++ -> 高级 -> 省略默认的库名称: 是(/Zl)

结论

当使用静态库时,静态库的链接方式要与应用一致。
链接动态库时,没有这样的要求。


朝闻道,夕死可矣