【问题标题】:Conflicting overloads of global delete全局删除冲突重载
【发布时间】:2017-01-20 08:11:25
【问题描述】:

我正在尝试在现有 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。这可行,但我宁愿不用两层胶水而不是一层。

我正在使用 Visual Studio 2015。

【问题讨论】:

  • 内存跟踪很好,但不会重载全局 new 并删除一个普通的 hack?

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多