单个文件库的对象文件 (.o) 与头文件

Object file (.o) vs header file for a single file library?

本文关键字:文件 对象 单个      更新时间:2023-10-16

>假设我的库只是几个函数,它们整齐地适合 1 个文件,不需要任何外部依赖项。那么,将该库编译为.o对象文件并以这种方式分发它而不是仅将其作为头文件提供有什么优势吗?我似乎想不出任何东西,尽管我只是一个初学者。

如果使用目标文件有优势,是否有任何理由将该单个对象文件打包到存档 (.a( 中,而不是单独分发目标文件?

对于这样的小型库,在 .o 文件中实现它确实没有任何优势 - 无论如何您还必须提供一个标头。对于较大的库,事情变得不那么明显 - 链接目标代码通常比编译大量C++文本更快,然后无论如何您都必须链接这些文本,但另一方面,仅标头文件使用和分发更方便。

唯一的"优势"是,如果您不想让客户端访问您的源代码实现,而只想提供一个带有函数原型 + 二进制对象的标头。

如果你对客户端看到你的实现感到满意,那么仅标头库可能是一个很好的解决方案。

区别在于(单个对象文件或多个对象文件(,库链接机制允许您指定链接器应自动找到这些内容的路径,而对于单个对象文件则不能这样做。

因此,如果您的库只包含一个或多个对象文件并不重要。
提供库将是正确的方法。

并以这种方式分发它,而不仅仅是将其作为头文件提供?

但是,如果您可以在单个标头中提供所有实现,这是更可取的选择。