разрешить изменение имени без C++filt

Мне нужно удалить неиспользуемые функции из большого проекта C++. Прочитав некоторое время, я использовал эту ссылку: Как узнать, какие части кода никогда не используются?

Я компилирую на RedHat с помощью make-файлов. Я добавил в компилятор флаги:
-Wall -Wconversion -ffunction-sections -fdata-sections
и в компоновщик флаги:
-Wl,-rpath,--demangle,--gc-sections,--print-gc-sections
По какой-то раздражающей причине я получаю вывод после искажения даже после использования -- вариант демангл. Например:

/usr/bin/ld: Removing unused section '.text._ZN8TRACABLED0Ev' in file 'CMakeFiles/oded.dir/oded.cpp.o' /usr/bin/ld: Removing unused section '.text._ZN8TRACABLED1Ev' in file 'CMakeFiles/oded.dir/oded.cpp.o'

Итак, у меня есть 6000 имен функций, которые мне нужно разобрать, и я не могу использовать extern C.

Я могу написать скрипт для его разбора и использования c++filt, но я ищу решение, которое заставит компоновщик сам распарсить функцию!

Кто-нибудь знает, существует ли такое решение?


person Oded Itzhaky    schedule 18.05.2015    source источник


Ответы (1)


По какой-то раздражающей причине я получаю вывод после изменения даже после использования параметра --demangle

С 1_:

--demangle[=style]
--no-demangle

These options control whether to demangle symbol names in
error messages and other output.

Но эти сообщения:

Removing unused section '.text._ZN8TRACABLED0Ev' in file

не относятся к именам символов. Они касаются имен разделов, которые иногда включают имя символа. Так что это работает, как задокументировано.

Теперь, если вы действительно хотите что-то с этим сделать, вы можете разработать патч компоновщика, который также изменит имена разделов, и отправить его сопровождающим GNU binutils.

Но более простым вариантом может быть просто передача сообщений, которые вы хотите разобрать, через c++filt. Например:

echo "Removing unused section '.text._ZN8TRACABLED0Ev' in file" |
  sed -e 's/_ZN/ _ZN/' | c++filt

производит:

Removing unused section '.text.  TRACABLE::~TRACABLE()' in file
person Employed Russian    schedule 19.05.2015
comment
Спасибо! Похоже, я пойду по сценарию (: - person Oded Itzhaky; 26.05.2015