1>LINK : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
知识背景:
VC中有4个CRT链接库版本:
- libcmt.lib: static CRT link library for a release build (/MT)
- libcmtd.lib: static CRT link library for a debug build (/MTd)
- msvcrt.lib: import library for the release DLL version of the CRT (/MD)
- msvcrtd.lib: import library for the debug DLL version of the CRT (/MDd)
有四个选项:MT、MTd、MD、MDd
C运行库静态连接Release版本:MT libcmt.lib
C运行库静态连接Debug版本:MTd libcmtd.lib
C运行库动态连接Release版本:MD msvcrt.lib
C运行库动态连接Debug版本:MDd msvcrtd.lib
冲突的原因:
在一个应用程序里,既连接了C运行库静态库,又连接C运行库动态库
如debug模式:libcmtd.lib、msvcrtd.lib同时连接了,所以导致上面的告警
如release模式:libcmt.lib、msvcrt.lib同时连接了
一般这种情况下是因为引用的lib库里的C运行库和当前工程的C运行库连接方式不一致
解决方案一:忽略libcmtd.lib
项目属性也,“链接器”-》“输入”忽略特定默认库
因为我这里编译的是dll工程,所以忽略了c运行库静态连接
release版本同样类似操作,不过是忽略libcmtd.lib改成libcmt.lib
解决方案二:引入的库文件有源码的话
改变它的C运行库连接方式,保持和主工程的C运行库连接方式一致