Можно ли раскладывать символы C++ вручную?
Я получаю некоторые ошибки, как это:
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++ фильтей, я получаю "Не искаженный символ C++".
Я немного озадачен сообщением об ошибке, так как пример c++filtjs
дает это _ZN9wikipedia7article8wikilinkC1ERKSs
, который представляет wikipedia::article::wikilink::wikilink(std::string const&)
, Я вижу несколько моделей, среди них ZN#
, 7
а также 8
за ::
, а также C1ERK
потому что я предполагаю, что это некая ссылка на конструктор.
Я предполагаю, что жалуется, что отсутствует один из моих конструкторов для class Rational
, такие как Rational::Rational(RubyObject const&)
, Rational
Это шаблон, поэтому мне было бы полезно понять, какая версия отсутствует.
Но вопрос здесь действительно в том, как я могу разобрать руками. знак равно
1 ответ
Символ похож на тот, который производится clang или gcc. Оба этих компилятора используют ABI на основе Itanium ABI. Этот документ включает раздел о разборе, описывающий, как создаются внешние символы. Если вы усвоите соответствующие правила, вы сможете разобрать имена.
Я не смог найти документ на оригинальном сайте, и я не знаю, где живет официальный документ.