1. 程式人生 > >Error LINK2005: already defined in libcmt.lib

Error LINK2005: already defined in libcmt.lib

這個錯誤是微軟設計錯誤,因此如果遇到這個錯誤,我們只能躲過這個連結錯誤。具體的辦法就是將那個提示出錯的庫放到另外一個庫的前面。另外選擇不同的C函 數庫,可能會引起這個錯誤。MS, C有兩種C函式庫,一種是普通的函式庫:LIBC.LIB,不支援多執行緒。另外一種是支援多執行緒 的:msvcrt.lib。如果一個工程裡,這兩種函式庫混合使用,可能會引起這個錯誤。因此建議使用支援多執行緒的msvcrt.lib。   需要注意的是,當使用其他的庫的時候最容易產生這種錯誤,例如boost和wxWindow使用/MD來編譯的,也就是使用支援多執行緒的C函式庫。這時候 如果自己的程式沒有指明/MD的話,就會提示兩種C函式衝突,並且還有LNK2005錯誤。因此如果使用boost,wxWindow的話,需要指明 /MD。 msvcrt.lib是VC中的Multithreaded DLL 版本的C執行時庫,而libcmt.lib是Multithreaded的執行時 庫。在同一個專案中,所有的原始檔必須連結相同的C執行時庫。如果某一檔案用了Multithreaded DLL版本,而其他檔案用了Single- Threaded或者Multithreaded版本的庫,也就是說用了不同的庫,就會導致這個警告的出現。 VC中的C執行時庫一共有6種 Single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib Multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib Multithreaded using DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib Debug Single-threaded (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib Debug Multithreaded (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib Debug Multithreaded using DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib   這個在C++ ->Code Generation-->runtime library 中設定,實際上和靜態dll和動態dll有關    解決辦法:   Project Settings:   -> Configration Properties -> Linker -> Input -> Ignore Specific Library: libcmtd libcmtd 這個庫有時候不能忽略,忽略後會有不能解析的外部符號錯誤 其實有個方便的方法 連結時加入引數 /FORCE:MULTIPLE