2017-02-20 26 views
0

На моем Linux, у меня есть файл .cpp, имеющийМой C++ ФИЛТР, кажется, не работает должным образом, вывод не меняется

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

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

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

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

Помните, что эти имена являются символами clang, кажется, что C++ filter работает только для моей версии gcc? Или C++ filter должен иметь более новую версию для поддержки обоих компиляторов?

+0

Как вы получаете искореженные имена? –

+1

Используйте 'nm' not' strings'. 'nm -C' печатает символы, уже демаркированные. –

ответ

2

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

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

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

На некоторых системах, оба C и C++ компиляторы положить подчеркивание перед каждым именем. Например, имя C «foo» получает низкоуровневое имя «_foo». Эта опция удаляет начальное подчеркивание. Лишь c++filt удаляет символ подчеркивания по умолчанию, зависит от цели.

 Смежные вопросы

  • Нет связанных вопросов^_^