我尝试在visual-studio-2013中使用/clr标记编译一个相对较大的遗留c++项目。该项目生成一个dll。
我得到以下运行时异常:
第一个月
我必须补充的是,这种情况只发生在Python配置中(Release - Works)。此外,该项目大量使用模板和宏,(我想)这有助于生成大量的方法.
关于这个问题几乎没有任何文档。我从网上搜索到的信息(不知道是否准确)是:
在clr dll中有一个~ 65 K方法的限制。所有本机类的所有方法都进入一些特殊的<Module>
,所以它构成了一个全局限制。
一个建议是拆分项目,但由于类间的依赖性,这并不是很简单。我想这是可行的。
如果你能帮忙的话,我将不胜感激。
3条答案
按热度按时间envsm3lx1#
最后我把代码分成了两个dll,并删除了一些我没有使用的代码,困难的部分是识别“死”代码并确保它广泛地使用模板(否则我只是在一个水桶中删除水滴)。
我知道这不是一个你想听到的解决方案,但我找不到任何其他工作的变通办法。
vlf7wbxs2#
我已经在VS2015中为这个问题挣扎了几个星期。最后我找到了链接器选项:
/OPT:REF
,它可以在Project properties->Linker->Optomization->References
下找到。这从输出DLL的大小中删除了大约12MB,并且在运行时不再抛出异常。yc0p9oo03#
您可以尝试为C++/CLI项目启用预编译头文件。
在禁用使用预编译头文件后,我在编译器构建中遇到了这个限制/错误。然后不得不使用Scott的答案提供的
/OPT:REF
技巧。值得称赞。但似乎使用预编译头文件也可以减少总方法。