首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用c++filt解析名称损坏

不使用c++filt解析名称损坏
EN

Stack Overflow用户
提问于 2015-05-18 05:11:35
回答 1查看 480关注 0票数 0

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

我使用makefiles在RedHat上编译。我在编译器中添加了以下标志:

-Wall -Wconversion -连接-区段-fdata-区段

链接器上的旗子:

-Wl,-rpath,--解析式,gc-区段,打印-gc-

由于一些烦人的原因,即使在使用--分解选项之后,也会收到故障后的输出。例如:

/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,但是我正在寻找一种解决方案,它将使链接器自行解除对函数的破坏!

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-19 05:07:35

由于一些烦人的原因,即使在使用了--解魔选项之后,我也会在损坏后接收输出。

来自man ld

代码语言:javascript
复制
--demangle[=style]
--no-demangle

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

但这些信息:

代码语言:javascript
复制
Removing unused section '.text._ZN8TRACABLED0Ev' in file

不是关于符号名的。它们是关于节名的,有时恰好包括符号名。所以这是按文件记录的。

现在,如果您真的想为此做些什么,您可以开发一个链接器修补程序来解析节名,并将其发送给GNU binutils维护人员。

但是,一个更容易的选择可能是简单地通过c++filt传输您想要的消息。例如:

代码语言:javascript
复制
echo "Removing unused section '.text._ZN8TRACABLED0Ev' in file" |
  sed -e 's/_ZN/ _ZN/' | c++filt

生产:

代码语言:javascript
复制
Removing unused section '.text.  TRACABLE::~TRACABLE()' in file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30295510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档