编辑器加载中...
链接警告 LNK4098
defaultlib "library" conflicts with use of other libs; use /NODEFAULTLIB:library
你试图链接相互不兼容的库。
重要提示
你可以使用链接开关/VERBOSE:LIB来了解链接器在搜索哪个库。如果你试图创建一个使用单线程非调试版本运行库的执行文件时收到LNK4098警告,那么使用/VERBOSE:LIB参数来找出链接器在搜索哪个库。链接器应该列出搜索的库LIBC.LIB,而不是LIBCMT.LIB, MSVCRT.LIB, LIBCD.LIB, LIBCMTD.LIB, 或者MSVCRTD.LIB等库。你可以通过在VC开发环境项目 Project 设置 Settings 链接Link 页面中的Ignore Libraries编辑框中输入不正确的运行时库名告诉链接器忽略这些运行时库,或者可以使用/NODEFAULTLIB:library 的链接开关来忽略那些不正确的库。参阅MSDN中 Ignore Libraries 章节了解(/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