разрешаване на изкривяване на имена без c++filt

Трябва да премахна неизползваните функции от голям C++ проект. След като прочетох известно време, използвах тази връзка: Как мога да разбера кои части от кода никога не се използват?

Компилирам на RedHat с помощта на makefiles. Добавих към компилатора флаговете:
-Wall -Wconversion -ffunction-sections -fdata-sections
и към линкера флаговете:
-Wl,-rpath,--demangle,--gc-sections,--print-gc-sections
По някаква досадна причина получавам резултата след манипулиране дори след използване на -- demangleопция. Например:

/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

От man ld:

--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