在没有 c++filt 的情况下解析名称重整
resolve name mangling without c++filt
我需要从一个大的 C++ 项目中删除未使用的函数。读了一段时间后,我使用了这个 link: How can I know which parts in the code are never used?
我使用 makefile 在 RedHat 上编译。我在编译器中添加了标志:
-Wall -Wconversion -ffunction-sections -fdata-sections
并给 linker 标志:
-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,但我正在寻找一种解决方案,使 linker 通过本身!
有人知道这样的解决方案是否存在吗?
For some annoying reason I receive the output after mangling even after using --demangle option
来自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
不关于符号名称。它们是关于 section 的名称,恰好 有时 包括符号名称。所以这是按照记录工作的。
现在,如果您真的想对此做点什么,您可以开发一个链接器补丁来分解部分名称,并将其发送给 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
我需要从一个大的 C++ 项目中删除未使用的函数。读了一段时间后,我使用了这个 link: How can I know which parts in the code are never used?
我使用 makefile 在 RedHat 上编译。我在编译器中添加了标志:
-Wall -Wconversion -ffunction-sections -fdata-sections
并给 linker 标志:
-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,但我正在寻找一种解决方案,使 linker 通过本身!
有人知道这样的解决方案是否存在吗?
For some annoying reason I receive the output after mangling even after using --demangle option
来自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
不关于符号名称。它们是关于 section 的名称,恰好 有时 包括符号名称。所以这是按照记录工作的。
现在,如果您真的想对此做点什么,您可以开发一个链接器补丁来分解部分名称,并将其发送给 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