链接错误-库冲突(libcmt.lib和libcmtd.lib)

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

 

 

 

总之,一句话,lib之间有冲突。需要删除导入的一些libs。 

 

   版 本 类 型 使用的library 被忽略的library
R  Release 单线程 libc.lib libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
多线程 libcmt.lib libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
使用DLL的多线程 msvcrt.lib libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
D   Debug 单线程 libcd.lib libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
多线程 libcmtd.lib libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
使用DLL的多线程 msvcrtd.lib libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

例如编译Release版本的单线程的工程,在linker的命令行加入如下的参数: /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib

解决办法:
在CUDA编译选项里加入/MTd 或  /MT

Project Settings:  

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

你可能感兴趣的:(多线程,c,CUDA,dll,library,linker)