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

Can I identifying unused C++ header by looking at the symbols in the binary?

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

我的最终目标是删除 accidentally/unnecessary 包含的 C++ headers。通过一些搜索,我意识到没有 up-to-date 免费的 Linux 工具可用于此。

Detecting superfluous #includes in C/C++?

How should I detect unnecessary #include files in a large C++ project?

我想知道是否可以通过查看符号在更高层次上实现这一点。方案如下:

mycomponent.cc 包含 component_1.hhcomponent_2.hh,假设 component_2.hh 是未使用的包含,它们是动态 linked.

计划如下:假设我一开始就知道我需要 link 的所有库。如果我从 mycomponent.so 中获取所有 undefined symbols,比如 my_list,并将其与所有 defined symbols 进行比较component_1.socomponent_2.so。如果 component_2.so 不包含来自 my_list 的符号。然后我会知道 component_2.so 是不需要的,然后我可以回去看看 component_2 中有哪些 headers 应该被删除。当然,这只有在 component_2 中的所有 headers 都没有在 my_component

中使用时才有效

这可行吗?

简答 - 没有。代码实际未使用的任何符号都将被优化掉,不会出现在最终的二进制文件中。即使它们不是,也无法从二进制 中确定 哪个 header 包含了 sumbol 最初来自。

您正在寻找的是源代码分析器,它将解析您的源代码并指出其中的任何问题,例如 unused/unnecessary header 包含。