我有一个可视化工作室2012 c++项目。我最近卸载了它并安装了visual studio 2015并升级了该项目。当我构建项目时,会出现错误,如下所示:
函数中引用的错误LNK2019未解析外部符号_memcmp
此外,在我的代码memcmp功能中,我没有使用任何地方。
我使用了链接器详细功能,可以在输出文件中看到以下内容:
发现_memcmp 在MyC++Project.obj中引用 在libcpmtd.lib(xstrcoll.obj)中引用 加载libvcruntimed.lib(__memcmp_.obj)
这里有两个问题
1.即使我没有在代码中使用memcmp,为什么我会得到链接器错误?
2.为什么memcmp作为__memcmp_.obj加载?
我的项目中也有以下设置:
1.C++-->代码生成-->运行时库设置为/MTd
2.将链接器->忽略所有默认库设置为空。
我尝试了所有的项目设置,但一切都白费了。
我只对这个未使用的memcmp函数有异议。
我使用了mamcpy和memset,对那些没有问题。
发布于 2016-03-23 12:30:37
发布于 2017-11-07 01:36:08
尝试将vcruntime.lib和ucrt.lib添加到附加依赖项中。===>属性->Linker->Input->附加依赖项
'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"的样本路径
我的环境:VS2017 (v141)
发布于 2021-10-08 01:12:33
我在Visual 2015的遗留C++ 6.0 nmake文件中遇到了同样的问题。
这篇名为介绍通用CRT的博客文章描述了Visual 2015运行时是如何划分为多个库的。运行时现在“将CRT划分为两个逻辑部分: VCRuntime (包含进程启动和异常处理所需的编译器支持功能)和一个包含CRT所有纯库部分的”稳定“部分,以便于更新。
只要您不使用
/nodefaultlib选项链接,则在链接项目时将找到所有正确的库文件。如果使用/nodefaultlib选项链接,则在链接时需要链接多个额外的库。例如,虽然以前可能只链接了msvcrt.lib以使用CRT,但现在还需要链接vcruntime.lib和ucrt.lib。下面是一个表,它显示了每个库的“口味”都需要链接哪些库: 发布DLL (/MD ):msvcrt.lib vcruntime.lib ucrt.lib Debug DLL (/MDd):msvcrtd.lib vcruntimed.lib ucrtd.lib发布静态(/MT ):libcmt.lib libvcruntime.lib libucrt.lib Debug静态(/MTd):libcmtd.lib libvcruntimed.lib libucrtd.lib
还请参阅Microsoft文档C运行时和C++标准库.lib文件,该文档描述了有关库的详细信息。
https://stackoverflow.com/questions/34285476
复制相似问题