我收到一些这样的错误:
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
然后同样的__ZN2nm7ComplexIfEC1ERKNS_10RubyObjectE
.
很遗憾,c++filt
似乎并不想分解这些。当我尝试将它们输入C++filtjs在线接口 http://pear.warosu.org/c++filtjs/,我得到“不是损坏的 C++ 符号。”
我对错误消息有点困惑,因为这个例子c++filtjs
给出的是_ZN9wikipedia7article8wikilinkC1ERKSs
,这代表wikipedia::article::wikilink::wikilink(std::string const&)
。我看到了几种模式,其中ZN#
, 7
and 8
for ::
, and C1ERK
我猜测是对构造函数的某种传递引用。
我猜它是在抱怨缺少我的一个构造函数class Rational
, 例如Rational::Rational(RubyObject const&)
. Rational
但是,它是一个模板,因此了解缺少哪个版本会对我有所帮助。
但这里的问题实际上是我如何用手拆开。 =)
该符号看起来像由 clang 或 gcc 生成的符号。这两个编译器都使用基于安腾ABI http://www.swag.uwaterloo.ca/acd/docs/ItaniumC++ABI.htm。本文档包括一个关于破坏的部分 http://www.swag.uwaterloo.ca/acd/docs/ItaniumC++ABI.htm#mangling描述外部符号是如何构造的。如果你内化了相应的规则,你应该能够分解这些名字。
我无法在原始网站上找到该文档,而且我也不知道官方文档在哪里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)