天天看點

連結錯誤-庫沖突(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

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

from:http://blog.csdn.net/redline2005/article/details/6313703

繼續閱讀