VS设置中的MT(d)与MD(d)

来源:互联网 发布:淘宝清洗后钱该怎么办 编辑:程序博客网 时间:2024/05/20 17:41

Windows编程中经常要链接多个lib库,又是会报libcmt.lib(libcmtd.lib)与msvcrt.lib(msvcrtd.lib)的链接冲突。

其原因是,在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文件用了Multithreaded DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。

不同运行时库选项代表的 C运行时库如下,其中M带代表多线程,D代表使用DLL,d代表Debug

   版 本类 型使用的library被忽略的libraryR  Release单线程libc.liblibcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib多线程 /MTlibcmt.liblibc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib使用DLL的多线程 /MDmsvcrt.liblibc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.libD   Debug单线程libcd.liblibc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib多线程  /MDdlibcmtd.liblibc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib使用DLL的多线程 /MDmsvcrtd.liblibc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

解决冲突的办法:

1、所以库使用同样的运行时库选项

2、忽略特定库

     例如,libcmt.lib冲突,在有"LIBCMT"冲突错误存在,在“配置属性-->链接器-->输入-->忽略特定库”中把libcmt.lib添加进去或者在“配置属性-->链接器-->命令运”的“附加选项”添加上/NODEFAULTLIB:libcmt.lib
libcmtd 这个库有时候不能忽略,忽略后会有不能解析的外部符号错误
其实有个方便的方法 链接时加入参数 /FORCE:MULTIPLE


0 0
原创粉丝点击