[英]memcmp linker error Visual Studio 2015
我有一個 visual studio 2012 c++ 項目。 我最近卸載了它並安裝了 visual studio 2015 並升級了項目。 當我構建項目時,出現如下所示的錯誤:
錯誤 LNK2019 未解析的外部符號 _memcmp 在 function 中引用
此外,我沒有在我的代碼中的任何地方使用 memcmp 功能。
我使用了 linker 冗長的 function 並且可以在 output 文件中看到以下內容:
找到_memcmp
在 MyC++Project.obj 中引用
在 libcpmtd.lib(xstrcoll.obj) 中引用
加載 libvcruntimed.lib(__memcmp_.obj)
這里有兩個問題
1.即使我沒有在我的代碼中使用 memcmp 為什么我會收到 linker 錯誤?
2.為什么memcmp被加載為__memcmp_.obj
我的項目中也有以下設置:
1.C++-->代碼生成-->Runtime Library設置為/MTd
2.Linker-->Ignore All default libraries 設置為nothing
我已經嘗試了所有的項目設置,但一切都是徒勞的。
我只有這個 memcmp function 有問題,我沒有使用過。
我使用過 mamcpy 和 memset 並且沒有問題
將vcruntime.lib或其他適當版本的CRT Library顯式添加到鏈接器參數(其他依賴項)。
當您明確使用memcmp時,它可能作為內部函數處理並編譯為內聯函數。
嘗試將vcruntime.lib
和ucrt.lib
添加到其他依賴項中。 ===> properties-> Linker-> Input-> Additional Dependencies
'vcruntime.lib': "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\lib\\vcruntime.lib"
示例路徑'vcruntime.lib': "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\lib\\vcruntime.lib"
'ucrt.lib' : "C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.16299.0\\ucrt\\x86\\ucrt.lib"
示例路徑'ucrt.lib' : "C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.16299.0\\ucrt\\x86\\ucrt.lib"
我的環境: VS2017(第141頁)
我在 Visual Studio 2015 的舊版 Visual C++ 6.0 nmake
文件中遇到了同樣的問題。
這篇名為通用 CRT 簡介的博客文章描述了如何將 Visual Studio 2015 運行時拆分為多個庫。 運行時現在“將 CRT 分為兩個邏輯部分:VCRuntime,其中包含進程啟動和異常處理等所需的編譯器支持功能,以及包含 CRT 的所有純庫部分的“穩定”部分”以便更輕松地進行更新。
只要您不使用
/nodefaultlib
選項進行鏈接,當您鏈接您的項目時,就會找到所有正確的庫文件。 如果使用/nodefaultlib
選項鏈接,則在鏈接時需要鏈接幾個額外的庫。 例如,您之前可能只是鏈接msvcrt.lib
以便使用 CRT DLL,現在您還需要鏈接vcruntime.lib
和ucrt.lib
。 下表顯示了您需要為庫的每個“風味”鏈接哪些庫:Release DLLs (/MD ): msvcrt.lib vcruntime.lib ucrt.lib Debug DLLs (/MDd): msvcrtd.lib vcruntimed.lib ucrtd.lib Release Static (/MT ): libcmt.lib libvcruntime.lib libucrt.lib Debug Static (/MTd): libcmtd.lib libvcruntimed.lib libucrtd.lib
另請參閱 Microsoft 文檔C 運行時 (CRT) 和 C++ 標准庫 (STL).lib 文件,其中描述了有關這些庫的詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.