Visual C++ 概念:生成 C/C++ 程序?
鏈接器工具警告 LNK4098
?
錯誤消息
默認庫“library”與其他庫的使用沖突;請使用 /NODEFAULTLIB:library
您試圖與不兼容的庫鏈接。
注意
運行時庫現在包含可防止混合不同類型的指令。如果試圖在同一個程序中使用不同類型的運行時庫或使用調試和非調試版本的運行時庫,則將收到此警告。例如,如果編譯一個文件以使用一種運行時庫,而編譯另一個文件以使用另一種運行時庫(例如單線程運行時庫對多線程運行時庫),并試圖鏈接它們,則將得到此警告。應將所有源文件編譯為使用同一個運行時庫。有關更多信息,請參見使用運行時庫(/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