共用方式為


連結器工具警告 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