尝试针对旧STD库和Windows SDK进行编译时链接错误

时间:2017-06-29 13:41:00

标签: c++ visual-studio-2015 linker visual-studio-2005 unresolved-external

我有一个在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中工作?

我该如何正确解决这个问题?

1 个答案:

答案 0 :(得分:5)

因此,在阅读了大量重大修改文档后,我发现了一个标记,可以在放置新建并删除下禁止这些新的c ++ 14 delete实施here

添加标志/Zc:sizedDealloc-会删除缺少的运算符delete()实现 项目属性 - >配置属性 - > C / C ++ - >命令行 - >的 / ZC:sizedDealloc -

  

您可以使用编译器选项恢复旧行为   的 / ZC:sizedDealloc - 即可。如果使用此选项,则双参数删除   功能不存在,不会与您的展示位置发生冲突   删除操作符。

对于eh vector destructor iterator错误,我opened a separate questionanswered it there