連結器工具警告 LNK4098
defaultlib 'library' 與其他 libs 的使用發生衝突;使用 /NODEFAULTLIB:library
您嘗試連結不相容的連結庫。
注意
運行時間連結庫現在包含指示詞,以防止混合不同的類型。 如果您嘗試在相同程式中使用不同類型或偵錯和非偵錯版本的運行時間連結庫,您會收到此警告。 例如,如果您編譯了一個檔案來使用一種運行時間連結庫,而另一種檔案則使用另一種類型(例如偵錯與零售版),並嘗試連結它們,您將會收到此警告。 您應該編譯所有來源檔案,以使用相同的運行時間連結庫。 如需詳細資訊,請參閱 /MD、/MT、/LD (使用運行時間連結庫) 編譯程序選項。
您可以使用連結器的 /VERBOSE:LIB 參數來找出連結器所搜尋的連結庫。 例如,當您的可執行檔使用多線程、非偵錯運行時間連結庫時,報告的清單應該包含 LIBCMT.lib,而不是 LIBCMTD.lib、MSVCRT.lib 或 MSVCRTD.lib。 您可以針對您想要忽略的每個連結庫使用 /NODEFAULTLIB ,告訴連結器忽略不正確的運行時間連結庫。
下表顯示根據您想要使用的運行時間連結庫,應該忽略哪些連結庫。 在命令行上,針對每個連結庫使用一個 /NODEFAULTLIB 選項來忽略。 在 Visual Studio IDE 中,以分號分隔連結庫,以忽略 [忽略特定默認連結庫] 屬性中的分號。
若要使用此運行時間連結庫 | 忽略這些連結庫 |
---|---|
多線程 (libcmt.lib) | msvcrt.lib;libcmtd.lib;msvcrtd.lib |
使用 DLL 的多線程 (msvcrt.lib) | libcmt.lib;libcmtd.lib;msvcrtd.lib |
偵錯多線程 (libcmtd.lib) | libcmt.lib;msvcrt.lib;msvcrtd.lib |
使用 DLL 偵錯多線程 (msvcrtd.lib) | libcmt.lib;msvcrt.lib;libcmtd.lib |
例如,如果您收到這個警告,而且想要建立使用非偵錯 DLL 版本運行時間連結庫的可執行檔,則可以搭配連結器使用下列選項:
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib