1. 程式人生 > >預設庫“library”與其他庫的使用衝突;使用 /NODEFAULTLIB:library

預設庫“library”與其他庫的使用衝突;使用 /NODEFAULTLIB:library

您試圖與不相容的庫連結。

重要事項 執行時庫現在包含防止混合不同型別的指令。如果試圖在同一個程式中使用不同型別的執行時庫
或使用除錯和非除錯版本的執行時庫,則將收到此警告。例如,如果編譯一個檔案以使用一種執行時庫,
而編譯另一個檔案以使用另一種執行時庫(例如單執行緒執行時庫對多執行緒執行時庫),並試圖連結它們,
則將得到此警告。應將所有原始檔編譯為使用同一個執行時庫。有關更多資訊,請參閱使用執行時庫(/MD
、/ML、/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