c++ - 我可以通过查看二进制文件中的符号来识别未使用的 C++ 标头吗?
问题描述
我可以通过查看二进制文件中的符号来识别未使用的 C++ 标头吗?
我的最终目标是删除意外/不必要的 C++ 头文件。通过一些搜索,我意识到没有可用的最新、免费的 Linux 工具。
我应该如何检测大型 C++ 项目中不必要的#include 文件?
我想知道是否有可能通过查看符号在更高级别上实现这一目标。方案如下图:
mycomponent.cc
包括component_1.hh
和component_2.hh
,并且假设component_2.hh
是未使用的包括,它们是动态链接的。
这是计划:假设我首先知道我需要链接到的所有库。如果我从中获取所有未定义的符号,然后将其与 和 中的所有已定义符号进行比较。如果不包含来自 的符号。然后我会知道这不是必需的,然后我可以回去看看应该删除哪些标题。当然,这只有在不使用所有头文件的情况下才有效mycomponent.so
my_list
component_1.so
component_2.so
component_2.so
my_list
component_2.so
component_2
component_2
my_component
这可行吗?
解决方案
简短的回答 - 不。代码实际上未使用的任何符号都将被优化掉,并且不会出现在最终的二进制文件中。即使不是,也无法从二进制文件中确定sumbols 最初来自哪个标头。
您正在寻找的是一个源代码分析器,它将解析您的源代码并指出它的任何问题,例如未使用/不必要的标头包含。
推荐阅读
- android - 以编程方式降低音量在 FireTV 上不起作用
- html - 截断弹性项目中的文本
- oracle - 数据库备份脚本
- google-apps-script - 如果单元格日期等于今天,如何发送电子邮件
- java - 如何保存 editText 可见性状态(View.GONE)?
- python - 试图用蜘蛛生成器上的奇怪行为来回应亚马逊的验证码
- arduino - USART 通过 Arduino Leonardo 将十六进制代码传输到设备
- ffmpeg - 使用 ffmpeg 将 2 通道 .mov 文件转换为 .mp3
- c# - 如何将配置绑定到 JSON 对象数组 .Net Core
- python - 为什么在 ceph osd 抖动期间调用 boto3 list buckets 操作会返回 Bad Gateway (502)?