Можно ли раскладывать символы 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. Этот документ включает раздел о разборе, описывающий, как создаются внешние символы. Если вы усвоите соответствующие правила, вы сможете разобрать имена.

Я не смог найти документ на оригинальном сайте, и я не знаю, где живет официальный документ.

Другие вопросы по тегам