是否可以手动分解 C++ 符号?

Doc*_*awk 3 c++ demangler

我收到一些这样的错误:

dyld: lazy symbol binding failed: Symbol not found: __ZN2nm8RationalIxEC1ERKNS_10RubyObjectE
  Referenced from: /Users/jwoods/Projects/nmatrix/lib/nmatrix.bundle
  Expected in: flat namespace

dyld: Symbol not found: __ZN2nm8RationalIxEC1ERKNS_10RubyObjectE
  Referenced from: /Users/jwoods/Projects/nmatrix/lib/nmatrix.bundle
  Expected in: flat namespace
Run Code Online (Sandbox Code Playgroud)

然后同样的__ZN2nm7ComplexIfEC1ERKNS_10RubyObjectE.

不幸的是,c++filt似乎并不想分解这些。当我尝试在c++filtjs 在线界面中输入它们时中输入它们时,我得到“不是损坏的 C++ 符号”。

我对错误消息有点困惑,因为示例c++filtjs给出的是_ZN9wikipedia7article8wikilinkC1ERKSs,它代表wikipedia::article::wikilink::wikilink(std::string const&)。我看到了几种模式,其中ZN#78for ::、 和C1ERK我猜测是对构造函数的某种传递引用。

我猜它是在抱怨它缺少我的构造函数之一class Rational,例如Rational::Rational(RubyObject const&).Rational但是,它是一个模板,因此了解缺少哪个版本会对我有所帮助。

但这里的问题实际上是我如何用手拆开。=)

Die*_*ühl 6

该符号看起来像由 clang 或 gcc 生成的符号。这两个编译器都使用基于Itanium ABI的 ABI 。本文档包含有关分解的部分,描述如何构造外部符号。如果你内化了相应的规则,你应该能够分解这些名字。

我无法在原始站点上找到该文档,而且我也不知道官方文档在哪里。