c++ - 分析共享库中的重复代码链接

标签 c++ dll code-analysis binaryfiles

我们拥有一个大型代码库,其中包含超过 40 个项目(用 VS 行话来说),创建了多个 DLL/SO(约 15 个)和一个 EXE。

有一些实用程序项目静态链接以创建 EXE,并且也被大多数 DLL 使用。理想情况下,我们希望这些实用程序项目也是 DLL,这样代码就不会在依赖它们的每个 DLL 中重复。

是否有任何工具可以对 DLL 进行二进制分析,以查看存在多少重复(代码 + 数据)?对此进行估计会有所帮助。

最佳答案

没有工具,只有耳朵之间的工具。您想要关注链接静态库的项目,找到多次使用同一静态库的项目。这是假设一个函数可以多次链接的起点。

然后您可以使用链接器的/VERBOSE 选项,它会显示哪些函数正在从静态库链接。该选项有很多输出,但是简短且易于解析。

作为替代方案,请考虑使用链接器的/MAP 选项来生成 .map 文件。其中详细显示了哪些函数链接到最终的可执行文件中。让相同的函数在不同的 .map 文件中出现多次,表明将其放入 DLL 中可能会更有利。用您最喜欢的脚本语言编写一个小程序来处理/VERBOSE 输出或 .map 文件并查找匹配项是可行的。

关于c++ - 分析共享库中的重复代码链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19421521/

相关文章:

c# - 使用 C++ dll 的 C# 应用程序中的堆栈溢出

c# - 检测 C# 代码中的递归调用

c++ - Winapi 设置事件选项卡控件

c++ - 与访客设计模式实现相关的问题

C#:与 Object 一起使用的类

c++ - 动态链接时,应用程序如何知道要加载哪个 DLL 文件?

C语法分析器

visual-studio-2012 - FxCop 自定义规则在 VS2012 中没有名称(但 "official"规则有名称)

c++ - 签名 :ness optimization "bug" in gcc

c++ - 如何修复 OpenGL 3.3 中的黑屏输出