gpt4 book ai didi

c++ - 在没有 c++filt 的情况下解析名称重整

转载 作者:行者123 更新时间:2023-11-28 06:16:01 28 4
gpt4 key购买 nike

我需要从一个大型 C++ 项目中删除未使用的函数。阅读一段时间后,我使用了这个链接:How can I know which parts in the code are never used?

我使用 makefile 在 RedHat 上编译。我向编译器添加了标志:
-Wall -Wconversion -ffunction-sections -fdata-sections
和链接器的标志:
-Wl,-rpath,--demangle,--gc-sections,--print-gc-sections
由于某些烦人的原因,即使在使用 --demangle 选项后,我也会在 mangling 后收到输出。例如:

/usr/bin/ld:删除文件“CMakeFiles/oded.dir/oded.cpp.o”中未使用的部分“.text._ZN8TRACABLED0Ev”
/usr/bin/ld:删除文件“CMakeFiles/oded.dir/oded.cpp.o”中未使用的部分“.text._ZN8TRACABLED1Ev”

所以我有 6000 个函数名称需要整理,我不能使用 extern C

我可以编写一个脚本来解析它并使用 c++filt,但我正在寻找一种解决方案,让链接器自行分解函数!

有人知道这样的解决方案是否存在吗?

最佳答案

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

关于符号名称。它们是关于部分 的名称,有时 恰好包含符号名称。所以这是按记录工作的。

现在,如果您真的想对此做点什么,您可以开发一个链接器补丁来分解部分名称,并将其发送给 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++ - 在没有 c++filt 的情况下解析名称重整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30295510/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com