关于LNK4098MSDN中的一些说明

来源:互联网 发布:超好的淘宝女装店 编辑:程序博客网 时间:2024/05/17 17:56
 
Linker Tools Warning LNK4098
defaultlib "library" conflicts with use of other libs; use /NODEFAULTLIB:library
You are trying to link with incompatible libraries.
Important   The run-time libraries now contain directives to prevent mixing different types. You’ll receive this warning if you try to use different types or debug and non-debug versions of the run-time library in the same program. For example, if you compiled one file to use one kind of run-time library and another file to use another kind (for example, single-threaded versus multithreaded) and tried to link them, you’ll get this warning. You should compile all source files to use the same run-time library. See the Use Run-Time Library (MD, /ML, /MT, /LD) compiler options for more information.
You can use the linker’s /VERBOSE:LIB switch to determine which libraries the linker is searching. If you receive LNK4098 and want to create an executable file that uses, for example, the single-threaded, non-debug run-time libraries, use the /VERBOSE:LIB option to find out which libraries the linker is searching. The linker should print LIBC.LIB and not LIBCMT.LIB, MSVCRT.LIB, LIBCD.LIB, LIBCMTD.LIB, or MSVCRTD.LIB as the libraries searched. You can tell the linker to ignore the the incorrect run-time libraries by typing the incorrect libraries in the Ignore Libraries text box on the Link tab of the Settings dialog box in Developer’s Studio or by using the /NODEFAULTLIB:library option with LINK for each library you want to ignore. See the Ignore Libraries (/NODEFAULTLIB) linker option for more information.
The table below shows which libraries should be ignored depending on which run-time library you want to use.
To use this run-time library
Ignore these libraries
Single-threaded (libc.lib)
libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded (libcmt.lib)
libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded using DLL (msvcrt.lib)
libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Debug Single-threaded (libcd.lib)
libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
Debug Multithreaded (libcmtd.lib)
libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
Debug Multithreaded using DLL (msvcrtd.lib)
libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib
 
For example, if you received this warning and you want to create an executable file that uses the non-debug, single-threaded version of the run-time libraries, you could use the following options with the linker:
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
 
 
 
Visual C++ 概念:建置 C/C++ 程式
 
連結器工具警告 LNK4098
預設的程式庫 'library' 與其他使用的程式庫衝突;請使用 /NODEFAULTLIB:library
您嘗試連結不相容的程式庫。
注意   Run-Time 程式庫現在含有指示詞,可避免混合不同類型的程式庫。如果您嘗試在同一個程式中使用不同類型、或偵錯與非偵錯版本的 Run-Time 程式庫,就會出現這個警告。例如,如果您編譯了一個使用 Run-Time 程式庫的檔案,而其他檔案使用的是其他種類 (例如單一執行緒與多執行緒) Run-Time 程式庫,就會出現這個警告。您應該用相同的 Run-Time 程式庫來編譯所有的原始程式檔。如需詳細資訊,請參閱使用 Run-Time 程式庫 (/MD/ML/MT/LD) 編譯器選項。
您可以用連結器的 /VERBOSE:LIB 參數來決定連結器應該搜尋哪一個程式庫。如果發生 LNK4098 的警告,且您想要建立使用單一執行緒或非偵錯 Run-Time 程式庫等類的可執行檔,請使用 /VERBOSE:LIB 選項找出連結器所要搜尋的程式庫。連結器在搜尋程式庫時,應該會列印出 LIBC.lib,而不是 LIBCMT.libMSVCRT.libLIBCD.libLIBCMTD.lib MSVCRTD.lib。您可以對每個想要忽略的程式庫使用 /NODEFAULTLIB 選項,通知連結器忽略不正確的 Run-Time 程式庫。
下表顯示您在想用哪些 Run-Time 程式庫時應該忽略哪些程式庫。
若要使用這個 Run-Time 程式庫
請忽略這些程式庫
單一執行緒 (libc.lib)
libcmt.libmsvcrt.liblibcd.liblibcmtd.libmsvcrtd.lib
多執行緒 (libcmt.lib)
libc.libmsvcrt.liblibcd.liblibcmtd.libmsvcrtd.lib
使用 DLL (msvcrt.lib) 的多執行緒
libc.liblibcmt.liblibcd.liblibcmtd.libmsvcrtd.lib
偵錯單一執行緒 (libcd.lib)
libc.liblibcmt.libmsvcrt.liblibcmtd.libmsvcrtd.lib
偵錯多執行緒 (libcmtd.lib)
libc.liblibcmt.libmsvcrt.liblibcd.libmsvcrtd.lib
使用 DLL 的偵錯多執行緒(msvcrtd.lib)
libc.liblibcmt.libmsvcrt.liblibcd.liblibcmtd.lib
例如,如果您收到這個警告,而想要建立一個使用非偵錯、單一執行緒版本 Run-Time 程式庫的可執行檔,您可以使用下列連結器選項:
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB
 
 
原创粉丝点击