Yoc*_*mer 7 c++ linker visual-studio-2005 unresolved-external visual-studio-2015
我有一个在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)
Run Code Online (Sandbox Code Playgroud)
为什么要寻找删除器的内部实现?它应该从标题中获取实现吗?为什么它在VS2010而不是VS2015中有效?
我该如何正确解决这个问题?
因此,在阅读了大量重大更改文档之后,我发现了一个可以在此处禁用这些新的c ++ 14 delete实现的标志,在Placement new和delete下.
添加标志/ Zc:sizesDealloc-删除缺少的运算符delete()实现.
项目属性 - >配置属性 - > C/C++ - >命令行 - > / Zc:sizesDealloc-
您可以使用编译器选项/ Zc:sizedDealloc-恢复旧行为 .如果使用此选项,则双参数删除功能不存在,并且不会与您的展示位置删除操作符冲突.
对于eh vector destructor iterator错误,我打开了一个单独的问题,然后在那里回答.