LINK : warning LNK4098: defaultlib "LIBCMT " conflicts with use of other libs;

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 

默认库“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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值