我需要从一个大型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,但是我正在寻找一种解决方案,它将使链接器自行解除对函数的破坏!
有人知道是否存在这样的解决方案吗?
发布于 2015-05-19 05:07:35
由于一些烦人的原因,即使在使用了--解魔选项之后,我也会在损坏后接收输出。
来自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 filehttps://stackoverflow.com/questions/30295510
复制相似问题