我有一个在VS2005中编译的旧项目(可悲)。它必须保留在VS2005中,以便它可以正确链接到另一个具有VS2005 CRT,MFC等的进程。
现在我需要使用旧的VS2005工具集在VS2015中编译这个项目 我已将项目的VC ++目录更改为所有STD和Windows SDK标头/库(包括目录,参考目录,库目录,源目录)的旧文件夹。
这个技巧曾经在使用VS2010时工作正常,但在VS2015上我得到了一些奇怪的链接错误:
1>Project1.obj : error LNK2019: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" (??_M@YGXPAXIIP6EX0@Z@Z) referenced in function "public: virtual void * __thiscall PluginInterface::`vector deleting destructor'(unsigned int)" (??_EPluginInterface@@UAEPAXI@Z)
1> 1>
1>StdAfx.obj : error LNK2001: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" (??_M@YGXPAXIIP6EX0@Z@Z)
1> 1>
1>Project1.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete(void *,unsigned int)" (??3@YAXPAXI@Z) referenced in function __unwindfunclet$?getInstance@Project1@@SAPAV1@XZ$0
1> 1>
1>Project1.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete[](void *,unsigned int)" (??_V@YAXPAXI@Z) referenced in function "public: virtual void * __thiscall PluginInterface::`vector deleting destructor'(unsigned int)" (??_EPluginInterface@@UAEPAXI@Z)
为什么要寻找删除器的内部实现?它应该从标题中获取实现吗?为什么它在VS2010而不是VS2015中工作?
我该如何正确解决这个问题?
答案 0 :(得分:5)
因此,在阅读了大量重大修改文档后,我发现了一个标记,可以在放置新建并删除下禁止这些新的c ++ 14 delete
实施here
添加标志/Zc:sizedDealloc-会删除缺少的运算符delete()实现 项目属性 - >配置属性 - > C / C ++ - >命令行 - >的 / ZC:sizedDealloc - 强>
您可以使用编译器选项恢复旧行为 的 / ZC:sizedDealloc - 即可。如果使用此选项,则双参数删除 功能不存在,不会与您的展示位置发生冲突 删除操作符。
对于eh vector destructor iterator
错误,我opened a separate question和answered it there。