注意
執行階段程式庫現在包含可防止混合不同類型的指令。如果試圖在同一個程式中使用不同類型的執行階段程式庫或使用調試和非調試版本的執行階段程式庫,則將收到此警告。例如,如果編譯一個檔案以使用一種執行階段程式庫,而編譯另一個檔案以使用另一種執行階段程式庫(例如單線程執行階段程式庫對多線程執行階段程式庫),並試圖連結它們,則將得到此警告。應將所有源檔案編譯為使用同一個執行階段程式庫。有關更多資訊,請參見使用執行階段程式庫(/MD、/MT 和 /LD)編譯器選項。
可以使用連結器的 /VERBOSE:LIB 開關來確定連結器搜尋的庫。如果收到 LNK4098,並想建立使用如單線程、非調試執行階段程式庫的可執行檔,請使用 /VERBOSE:LIB 選項確定連結器搜尋的庫。連結器作為搜尋的庫輸出的應是 LIBC.lib,而非 LIBCMT.lib、MSVCRT.lib、LIBCD.lib、LIBCMTD.lib 和 MSVCRTD.lib。對每個要忽略的庫可以使用 /NODEFAULTLIB,以通知連結器忽略錯誤的執行階段程式庫。
下表顯示根據要使用的執行階段程式庫應忽略的庫。
若要使用此執行階段程式庫 請忽略這些庫
單線程 (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
調試單線程 (libcd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
調試多線程 (libcmtd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的調試多線程 (msvcrtd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib
(添加忽略庫的時候記著用分號隔開)
例如,如果收到此警告,並希望建立使用非調試、單線程版本的執行階段程式庫的可執行檔,可以將下列選項與連結器一起使用:
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib