全局删除的重载冲突

时间:2017-01-20 08:11:25

标签: c# c++ c++-cli

我正在尝试在现有的c ++代码库和c#wpf应用程序之间编写一个CLI互操作层。我的c ++库已经超载全局new和delete,以实现我自己的内存跟踪和其他细节。所以依赖关系看起来像这样:

(编译为静态库的本机库) - >(CLI层) - >(C#WPF应用程序)

但是,每当我包含我的本机库并尝试构建我的CLI项目时,我都会遇到一个冲突的符号,表示已在msvcrtd中定义的全局删除:

  

错误LNK2005" void __cdecl operator delete(void *)" (?? 3 @ YAXPAX @ Z)已在msvcrtd.lib中定义(delete_scalar.obj)

我不确定如何让我的构建版本采用全局删除而不是默认库中的删除。我已经尝试创建另一个纯本机项目,编译DLL,并将我的所有静态库编译成,然后让互操作层加载该DLL。这是有效的,但我不是没有2层胶水而是没有胶水。

我正在使用visual studio 2015。

1 个答案:

答案 0 :(得分:0)

本机组件使用CRT作为DLL?如果使用混合组件,则这是必需的。如果静态链接库使用静态CRT,则会遇到麻烦。

检查并链接/ VERBOSE标志以查看此其他删除的来源。消除此其他库调用。