c++链接器工具警告LNK4098:defaultlib 'library' conflicts with use of other libs; use /NODEFAULTLIB:library

​​​​​​

defaultlib 'library' conflicts with use of other libs; use /NODEFAULTLIB:library

您正在尝试链接不兼容的库。

注意

现在,运行时库包含防止混合不同类型的指令。如果您尝试在同一程序中使用不同类型或运行时库的调试版本和非调试版本,则会收到此警告。例如,如果您编译了一个文件以使用一种运行时库,而另一个文件使用了另一种运行时库(例如,调试与零售)并尝试链接它们,则会收到此警告。您应该编译所有源文件以使用相同的运行时库。有关更多信息,请参见/ MD,/ MT,/ LD(使用运行时库)编译器选项。

您可以使用链接器的/ VERBOSE:LIB开关来查找链接器搜索的库。例如,当您的可执行文件使用多线程,非调试运行时库时,报告的列表应包括LIBCMT.lib,而不应包括LIBCMTD.lib,MSVCRT.lib或MSVCRTD.lib。您可以通过对要忽略的每个库使用/ NODEFAULTLIB来告诉链接程序忽略不正确的运行时库。

下表显示了要忽略的库,具体取决于要使用的运行时库。在命令行上,对每个库使用一个/ NODEFAULTLIB选项以将其忽略。在Visual Studio IDE中,在“ 忽略特定的默认库”属性中分隔要用分号忽略的库

使用此运行时库 忽略这些库
多线程(libcmt.lib) msvcrt.lib; libcmtd.lib; msvcrtd.lib
使用DLL(msvcrt.lib)的多线程 libcmt.lib; libcmtd.lib; msvcrtd.lib
调试多线程(libcmtd.lib) libcmt.lib; msvcrt.lib; msvcrtd.lib
使用DLL(msvcrtd.lib)调试多线程 libcmt.lib; msvcrt.lib; libcmtd.lib

例如,如果收到此警告,并且想要创建一个使用运行时库的非调试DLL版本的可执行文件,则可以在链接器中使用以下选项:

/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
  • VS设置修改一下即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章