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設置修改一下即可

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