嵌入单声道 - “GC中的致命错误”:“根集太多”

时间:2011-11-28 12:50:00

标签: dll mono

我在C ++应用程序中嵌入mono,我通过dll库链接它,然后通过LoadLibrary将其加载到应用程序中。

当应用程序启动并且发生dll运行时链接时,单声道运行时似乎无法使用“Too many root sets”消息初始化自身。我不确定运行时本身何时以及如何初始化(我认为它发生在mono_jit_init上,但是在调用任何单声道函数之前会弹出错误。它恰好出现在LoadLibrary上我应该尝试手动加载它而不是依赖mono.lib导入库。)

我成功地将它嵌入到独立应用程序中,所以我认为它是特定于应用程序加载我的dll的方式,但我不知道到底是什么。

任何线索?

1 个答案:

答案 0 :(得分:1)

这可能限制了Boehm GC在Windows中的工作方式:它在LoadLibrary时挂钩到操作系统,以获取创建的线程和加载库的通知(这就是你在LoadLibrary()时遇到问题的原因而不是在mono_jit_init())。

或者可能是在GC初始化时加载了很多线程和库。如果您将应用程序直接链接到单声道,问题是否会消失?如果是,那应该是您当前的解决方法。

将来(或者如果从git构建mono),您可以使用不应该遇到此问题的SGen GC。