我们拥有一个大型代码库,其中包含超过 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/