如何解决 MSVC 对损坏名称长度的限制?

How could I work around MSVC's limit on the length of mangled names?

提问人:Yaron Tausky 提问时间:12/15/2015 更新时间:12/15/2015 访问量:204

问:

我有一段代码大量使用模板,导致名称非常长(超过 3000 个字符长)。在使用 MSVC 10 在发布模式下生成时,这不是问题 - 可能是因为一切都按预期内联。但是,当我尝试在调试模式下构建时,我收到有关未解析外部符号的链接器错误。它们不能是外部的,因为它们只是隐式实例化,因此它们的定义肯定存在于翻译单元中。

我观察到的一件奇怪的事情是,虽然一些被破坏的名称完全出现在错误消息中,但其他名称似乎被截断了,最后附加了一些看起来像哈希值的东西。被截断的残缺名称和哈希值加起来的长度为 255 个字符。我假设这是 MSVC 用来通过限制名称长度来加速链接的一些技巧。

那么,有什么合理的方法可以解决这个烂摊子吗?

C++ visual-studio-2010 链接器错误 名称

评论

0赞 Hans Passant 12/15/2015
记录的限制是 2047 个字符。255 限制适用于调试器,可能是可见的。当然,几乎每个人都能想出一个合理的方法来保持在2048以下:不要这样做。
3赞 Yaron Tausky 12/15/2015
当您拥有大量使用模板的大型代码库时,要避免这种情况并不容易。

答: 暂无答案