鏈接警告 LNK4098

鏈接警告 LNK4098

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

你試圖鏈接相互不兼容的庫。

重要提示   目前運行時庫包含預編譯指令來阻止混合不同類型庫的鏈接。如果你試圖在同一個程序中使用不同類型的或者調試/非調試版本的運行時庫,你將看到這個警告。舉個例子,如果你編譯一個文件使用某個類型的運行時庫,而別的文件使用另外一個類型(例,單線程版本和多線程版本),那麼在你試圖鏈接它們的時候,你將看到這個警告。你應該使用相同的運行時庫來編譯所有的源文件。參閱MSDN中的Use Run-Time Library 章節瞭解關於(MD, /ML, /MT, /LD)編譯開關的更多信息。

你可以使用鏈接開關/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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章