库不是仅限标题的原因是什么?

时间:2016-01-20 11:18:19

标签: c++ header-files

我真的很喜欢使用仅限标头的库,因为它们非常易于使用(没有链接器问题或者必须单独编译库)。例如,大多数Boost库都是仅标题库。但是又有一些部分,比如boost :: python,需要先构建。这是设计选择还是技术必需品?

我将Boost作为一个例子,但如果可能的话,我会更乐意回答。

2 个答案:

答案 0 :(得分:7)

使用编译库的最初原因是为了节省编译时间。图书馆可能很大。它们可能很大。

另一个论点是他们将源代码分开。还有很多宇宙不是开源的。

答案 1 :(得分:1)

仅支持标题:

  • 设置/导入时间缩短
  • 没有链接问题

仅限标题:

  • 标头之间的冲突无法解析,它们之间有编译时防火墙
  • 没有依赖隐藏可能
  • 增加包含其标题的每个目标的编译时间
  • 添加到从目标导出的符号堆。您的简单测试文件现在可以导出几千个符号。
  • (极端情况下)可能会减少COMDAT可折叠符号之间的分离,导致符号的多个副本无法从目标输出文件中删除,从而导致膨胀。这应该仅发生在ELF上的32k +符号上,但在其他目标(例如Mach-O)上发生得更早。