我正在遇到像这样的一些错误:
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在线界面中输入它们时,我得到了“不是一个混淆的C++符号”的提示。
我对错误信息有点困惑,因为c++filtjs
给出的示例是_ZN9wikipedia7article8wikilinkC1ERKSs
,表示wikipedia::article::wikilink::wikilink(std::string const&)
。我看到几种模式,其中包括ZN#
、7
和8
用于::
,以及C1ERK
用于我猜测是某种构造函数的传递引用。
我猜它抱怨缺少我的class Rational
的一个构造函数,例如Rational::Rational(RubyObject const&)
。但是,Rational
是一个模板,因此了解缺少哪个版本会很有帮助。
但问题是如何手动解开混淆的符号。 =)
nm::Complex::Complex(nm::RubyObject const&)
是第一个,nm::Rational::Rational(nm::RubyObject const&)
是第二个。您需要从名称修饰中删除第一个下划线。 - RapptzRational<int>
,但是如何显式编译特定的模板类构造函数呢? - Translunarc++filt -t -n
以不忽略下划线可以解析名称。 - greatwolf