静态库导致有效的堆指针断言

时间:2012-07-14 15:13:08

标签: c++ .net clr

我所拥有的是一个由3层组成的项目。基础层是一组原生C ++静态库,它们是游戏引擎的核心组件,如图形,音频等。

中间层将所有这些组合在一起成为另一个静态库,这是引擎本身。这样做的原因是因为我希望将引擎编译成可执行的分发版,但也可以将它包含在最顶层。

顶层是专为快速创建游戏内容而设计的.net应用程序。我想免费分发Studio和engine.exe用于商业用途。因此,我想将引擎创建到库中。

在某个地方,一个bug正在通过编译阶段。 engine.exe工作正常,但是当我添加时,.net应用程序会中断:

#include <string>
using std::string;

程序通过编译阶段没有错误,但在它到达第一个断点之前爆炸,实际上它甚至没有从我能告诉的主函数。它可以优化它或其他东西。我得到的错误是调试断言_CrtIsValidHeapPointer(pUserData)。它位于dbgheap.c的第1516行。我知道这不是问题,但我希望有人认识到这个断言并且可能有所帮助。

我最好的选择是问题与我如何链接库以及编译器设置有关,我尝试了不同的设置,还没有解决问题。如果有任何人有这方面的经验,如果您需要了解更多信息,我会非常乐意发布更多信息。

1 个答案:

答案 0 :(得分:0)

我不知道为什么会这样,但答案是here

解决方案是将 __ DllMainCRTStartup @ 12 添加到“属性”中的“强制符号引用”中。链接器|输入包含静态库的C ++ /ÇLI项目。