所有代码是否都已编译并包含在最终二进制文件中?

时间:2017-07-10 20:00:04

标签: class compilation binary

打扰一下,如果这个问题很愚蠢,但我已经四处搜索,却一无所获。

假设我创建了一个包含数百种方法的类扩展,并在项目中包含该类。现在假设从该扩展中,我只使用2或3种方法。请记住,类扩展有数百种方法。

当我编译代码时,二进制文件中将包含哪些内容?只是我从该类扩展中使用的方法或所有这些方法,甚至是那个特定项目没有使用的方法?

1 个答案:

答案 0 :(得分:0)

这可以分为三类:

  • 动态(共享)关联
  • GNU ld中的静态链接--whole-archive
  • GNU ld中的静态链接--no-whole-archive

(其他连接器可能有类似选项)。

动态链接

代码只包含您要扩展的库中的方法名称。

静态链接,整个存档

哎呀...将包括其他类的整个代码。

静态链接,没有整个存档

仅包含您使用的目标文件。我建议,对于大型课程,您可以尽可能地分割源代码。

使用的方法

尽管您明确使用了这些方法,但每个扩展/覆盖都需要一些符号,如vtable。请参阅编译器文档。