На моем Linux, .cpp файл, имеющий
void f(){}
struct C{void f(){}};
Я скомпилировал его и запустил двоичный файл, попытался разобрать имя функции:
$c++filt __Z1gv
__Z1gv
$c++filt __ZN1C1fEv
__ZN1C1fEv
Ну, это не работает, как я ожидал. Я что-то здесь не так понял? Должен ли я добавить несколько букв или удалить некоторые буквы, чтобы это работало?
Обратите внимание, что эти имена являются символами Clang, кажется, C ++ Filt работает только для моей версии GCC? Или C ++ Filter должен иметь более новую версию для поддержки обоих компиляторов?
Возможно, вам придется пройти -_
флаг.
$ c++filt -_ __Z1gv
g()
$ c++filt -_ __ZN1C1fEv
C::f()
-_
—стрип-подчеркиваниеВ некоторых системах компиляторы C и C ++ ставят подчеркивание перед каждым именем. Например, имя C
foo
«получает имя низкого уровня»_foo
Msgstr «Эта опция удаляет начальное подчеркивание.c++filt
удаляет подчеркивание по умолчанию зависит от цели.
Других решений пока нет …