編譯時間候發現如下警告,雖然問題不大,但是出現警告多少不舒服,於是搜尋了一下。
Linking...
LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library
以下是MSDN上的,具體串連http://msdn.microsoft.com/en-us/library/6wtdswk0%28VS.71%29.aspx
defaultlib 'library
' conflicts with use of other libs; use
/NODEFAULTLIB:library
You are trying to link with incompatible libraries.
Note
The run-time libraries now
contain directives to prevent mixing different types. You will 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 will
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
incorrect run-time libraries by using /NODEFAULTLIB
for each library you want to ignore.
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:
Copy
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
上面已給出解決方案
具體動手如下:
方案一:project setting -> link -> Category: input ->
Igore Libraries = LIBC.lib
輸入時注意當前Build是什麼版本,libs之間用“,”隔開。“Ingore all default libraries”不能勾選。
方案二:project setting -> link ->project opinion 後面加內容/NODEFAULTLIB:LIBC
兩種方案的效果是一樣的