2015-05-18 3 views
0

Мне нужно удалить неиспользуемые функции из большого проекта на C++. Прочитав некоторое время, я использовал эту ссылку: How can I know which parts in the code are never used?разрешить имя mangling без C++ filter

Скомпилировать на RedHat с помощью make-файлов. Я добавил компилятора флаги:
-Wall -Wconversion -ffunction сечения -fdata сечения
и линкера флагами:
-Wl, -rpath, --demangle, - дс -разделы, - 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 имен функций мне нужно unmangle и я не могу использовать extern C.

Я могу написать сценарий, чтобы разобрать его и использовать C++ filt, но Im ищет решение, которое сделает компоновщик unmangle функцией самостоятельно!

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

ответ

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

Спасибо! Похоже, я поеду по сценарию (: – kurdt

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