【问题标题】:Merging two C++ packages合并两个 C++ 包
【发布时间】:2012-05-07 12:28:05
【问题描述】:

我有两个 C++ 包 A 和 B,其中 A 依赖于 B。我想通过让 A 吞下 B 代码的最小部分来打破这种依赖关系,这样 B 就可以被完全抛弃。

有人对我如何分析包 A 以准确找出我需要从 B 引入的类/函数等有什么建议吗?

编辑: 我只是删除了包 B 并经历了(很多)编译 A 循环,从 B 复制文件,相应地更新了 Makefile.am。现在我很确定我已经用比需要的更多的东西来膨胀包 A。我如何找到 A` 代码中从未在其产生的可执行文件/库中使用的部分?

【问题讨论】:

  • 这可能有点痛苦,但您总是可以删除B,重新编译并查看您收到的错误消息:) 然后从源代码管理中恢复您实际需要的内容。完成后,作为第二步,您可以将保留的内容迁移到 A
  • 我一直在这样做。是的,真的很痛苦。我拉过丢失文件的第一层,并重新编译,这给了我那些依赖的东西。如果我剪切了我实际上不需要的第一层文件的一半,则可能会删除一些第二层文件。

标签: c++ profiling package packaging


【解决方案1】:

我认为有三种可能的行动方式:

  1. 真正只导入需要的内容:撤消你所做的,然后再做一次,但这次不要从 B 复制整个文件,而只是复制编译器告诉你丢失的单个函数。

  2. 根据您目前的情况,让一些工具为您分析代码(请参阅Looking for a free source code analyzer (Function depedency tree)Looking for a free source code analyzer (Function depedency tree)),或者使用所有 A 编写大量代码并运行代码覆盖率分析。

  3. 注释掉从 B 复制的源代码中的函数(不是在标题中)。现在您的链接器将抱怨任何缺少的功能。取消注释这些,删除其余部分,包括它们在标题中的声明。这是第一种方法的相反方法。

【讨论】:

    【解决方案2】:

    也许 objdump 会给你一些有用的信息。在二进制上使用它(objdump -t),它应该能够显示一些关于导入函数的有用信息。

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多