库不是仅标题的原因是什么?
What is the reason for a library to not be header-only?
我真的很喜欢使用仅标头库,因为它们非常易于使用(没有链接器问题或必须单独编译库)。例如,大多数 Boost 库都是仅标头的。但话又说回来,有些部分,比如boost::p ython,需要先构建。这是设计选择还是技术需要?
我以 Boost 为例,但如果可能的话,我希望得到更笼统的答案。
使用编译库的最初原因是为了节省编译时间。图书馆可以很大。它们可能是巨大的。
另一个论点是它们将源代码分开。宇宙中仍有很多东西不是开源的。
只支持标题:
- 减少设置/导入时间
- 没有链接问题
仅针对标头:
- 标头之间的冲突无法通过它们之间的编译时防火墙解决
- 无法隐藏依赖关系
- 增加包含其标头的每个目标的编译时间
- 添加到从目标导出的符号堆。您的简单测试文件现在可以导出几千个符号。
- (在极端情况下)可能会减少 COMDAT 可折叠符号之间的分离,从而导致符号的多个副本无法从目标输出文件中移除,从而导致膨胀。这应该只发生在 ELF 上的 32k+ 符号处,但在其他目标(例如 Mach-O)上发生得更早。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 标题文件中大规模转发声明类别的风险是什么?
- 库不是仅标题的原因是什么?
- 这个标题的命名约定指的是什么
- 开发标题到底是什么?