Мой C++ Filter, кажется, не работает должным образом, никаких выходных изменений

На моем Linux,.cpp файл, имеющий

void f(){}
struct C{void f(){}};

Я скомпилировал его и запустил двоичный файл, попытался разобрать имя функции:

$c++filt __Z1gv
__Z1gv
$c++filt __ZN1C1fEv
__ZN1C1fEv

Ну, это не работает, как я ожидал. Я что-то здесь не так понял? Должен ли я добавить несколько букв или удалить некоторые буквы, чтобы это работало?

Заметьте, что эти имена являются символами Clang, кажется, C++ Filter работает только для моей версии GCC Или C++ Filter должен иметь более новую версию для поддержки обоих компиляторов?

1 ответ

Решение

Возможно, вам придется пройти -_ флаг.

$ c++filt -_ __Z1gv
g()
$ c++filt -_ __ZN1C1fEv
C::f()

-_
--strip-подчеркивание

В некоторых системах компиляторы C и C++ ставят подчеркивание перед каждым именем. Например, имя Cfoo"получает имя низкого уровня"_fooMsgstr "Эта опция удаляет начальное подчеркивание. c++filt удаляет подчеркивание по умолчанию зависит от цели.

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