首页 > 解决方案 > 我可以通过查看二进制文件中的符号来识别未使用的 C++ 标头吗?

问题描述

我可以通过查看二进制文件中的符号来识别未使用的 C++ 标头吗?

我的最终目标是删除意外/不必要的 C++ 头文件。通过一些搜索,我意识到没有可用的最新、免费的 Linux 工具。

在 C/C++ 中检测多余的#include?

我应该如何检测大型 C++ 项目中不必要的#include 文件?

我想知道是否有可能通过查看符号在更高级别上实现这一目标。方案如下图:

图片

mycomponent.cc包括component_1.hhcomponent_2.hh,并且假设component_2.hh是未使用的包括,它们是动态链接的。

这是计划:假设我首先知道我需要链接到的所有库。如果我从中获取所有未定义的符号,然后将其与 和 中的所有已定义符号进行比较。如果不包含来自 的符号。然后我会知道这不是必需的,然后我可以回去看看应该删除哪些标题。当然,这只有在不使用所有头文件的情况下才有效mycomponent.somy_listcomponent_1.socomponent_2.socomponent_2.somy_listcomponent_2.socomponent_2component_2my_component

这可行吗?

标签: c++headerlinkernm

解决方案


简短的回答 - 不。代码实际上未使用的任何符号都将被优化掉,并且不会出现在最终的二进制文件中。即使不是,也无法从二进制文件中确定sumbols 最初来自哪个标头。

您正在寻找的是一个源代码分析器,它将解析您的源代码并指出它的任何问题,例如未使用/不必要的标头包含。


推荐阅读