基础知识
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 运行时
- 生成lib文件的源码中不能使用 Standard C++ Library
在源代码中不能包含<string>
,<vector>
等类似这样的C++标准定义的头文件, 否则会出现类似下边的错误
1>StaticLib.lib(StaticLib.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”(LibDemo.obj 中)
- 设置编译器参数: Zl
C/C++ -> 高级 -> 省略默认的库名称: 是(/Zl)
结论
当使用静态库时,静态库的链接方式要与应用一致。
链接动态库时,没有这样的要求。
Comments | NOTHING